Hallo Leute,

ich habe ein Heap-Problem, das Euch allen wahrscheinlich bekannt sein soll:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Nun habe ich schon etwas über Heap gelesen und ich denke ich verstehe schon, was das ist. Allerdings habe ich absolut
keine Information dazu gefunden, wie man solche Probleme löst. Die magische Zeile System.gc(); funktioniert bei mir nicht
(ist wohl auch nicht nur bei mir der Fall) und sonst habe ich keine Ahnung, wie man damit umgeht.

Es ist wohl möglich für java mehr heap zu besorgen, die Lösung finde ich aber nicht optimal, weil man das sonst an jedem Rechner machen müsste,
wo dieses Program gestartet werden soll.

Kurz zum Programm-Aufbau:
Im ersten Schritt werden PDF-Dateien in .txt konvertiert.
Im zweiten Schritt werden aus .txt Dateien n-gramme extrahiert, in die neuen .txt Dateien werden die Hash-Werte und entsprechende Strings
geschrieben
Im dritten Schritt werden die Dateien mit Hashwerten einglesen und eine Art inverted Index erstellt mit dem Hash-Wert und den Dateinamen.
Der Index wird zuerst in eine Hashtable geschrieben und dann in eine .txt Datei
Im vierten Schritt wird das gleiche gemacht, nur dass das ganze in Berkeley DB gespeichert wird
(Schritt 3 wird eigentlich nur zum Vergleich gemacht)

Das OutOfMemoryError taucht immer im 4. Schritt auf. Wenn alle Schritte durchlaufen werden, bekomme ich den Fehler schon beim erzeugen des
Datenbank Objekts. Wenn ich nur den Schritt 4 starte, läuft das Programm durch, aber im VM Telemetry Window sehe ich,
dass immer mehr heap gebraucht wird. Jetzt, wo ich nur 40-50 Dateien habe ist das zwar nicht so schlimm, wenn ich aber 10000 Dateien habe,
könnte es richtig problematisch werden.

Gibt es denn irgendeine Möglichkeit es zu erzwingen, dass Heap nach jedem Schritt gereinigt wird (System.gc(); geht nicht)?
Ich wäre auch sehr dankbar für jede Information, wie man mit Heap und Garbage Collection umgeht, aber eben konkrete Tipps
keine allgemeinen Informationen. Wenn möglich auch für Anfänger geeignet.

Vielen Dank im Voraus.