Zu wenig Arbeitsspeicher

imox

Aktives Mitglied
Hallo,

ich habe einen reader geschrieben, der CSV Dateien aus einem speziellem Programm von uns lesen kann. Mein Problem ist jetzt, dass die CSV Dateien teilweise 500 mb oder größer sein können. Und wenn ich dann mit dem reader die CSV lesen will bekomm ich diese Exception: java.lang.OutOfMemoryError: Java heap space

Ist ja klar der RAM ist voll. Meine Frage ist jetzt wie das Problem lösen kann? Klar ich könnte die CSV Datei kleiner machen aber das soll der reader auch können. Ich könnte noch einen splitter oder so schreiben der die CSV Dateien aufsplittet und dann nach nun nach die Dateien verarbeitet.

Aber ich höffe es gibt noch eine bessere Lösung ;)

Gruß Imox
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Das Thema hatten wir hier schon öfter. Wundert mich jedes mal ein bischen. Ich lese selbst auch Dateien ein, die teilweise mehr als 1,5GB groß sind und habe keine Speicherprobleme.

Versuche, den Scope Deiner Variablen möglichst klein zu halten. Klassenvariablen sind da ganz schlecht, Instanzvariablen auch. Prüfe also, ob Du evtl. Klassenvariablen/Instanzvariablen benutzt, die Du methodenlokal oder sogar schleifenlokal machen kannst. Das alles, damit der GC eine Chance hat, sie frei zu räumen. Das alles geht natürlich nur, wenn Du die Werte nicht woanders brauchst. Ohne Code kann man hier nicht mehr sagen...
 

imox

Aktives Mitglied
Naja den Code hier posten würde glaube ich den Rahmen sprengen. Weil das ganze Schema in 45 Klassen gepackt wurde. Die ich sogar nicht mal erstellt habe. So eine CSV Datei besteht aus Prozessen und jeder Process setzt sich aus den Klassen zusammen. Dann hat ein Prozess auch noch Flüsse und da kann es schon mal hunderte von Flüssen geben usw. Daher gibt es unzählige Objekte. Ich habe gerade keine Idee wie ich da was anders machen soll.
 
S

SlaterB

Gast
wenn der Rechner 2 GB Arbeitsspeicher hat, dann kann man Java mehr davon nutzen lassen
-> Suchmaschine Java Arbeitsspeicher erhöhen
 

imox

Aktives Mitglied
Doch bei unseren CSV Dateien schon. Das sind Ökobilanzdaten daher Prozesse ;) Bisschen kompliziert das ganze. Naja ich werd das schon irgendwie hinbekommen.

Vielen Dank euch
 

Crian

Top Contributor
Musst du die Daten denn zwingend alle gleichzeitig im Hauptspeicher haben? Oder reicht es immer, einen Datensatz zur Zeit zur Bearbeitung im Speicher zu haben?
 

Ähnliche Java Themen

Neue Themen


Oben