Daniel Thoma: Frage zu Vector

Beitrag lesen

Hallo Christian,

Nein den kannst Du nicht abfangen. Wenn die VM über keinen freien Speicher mehr verfügt, kann sie auch keine Ausnahmenverarbeitung mehr machen. Dazu müsste sie ja erst irgend etwas willkürlich freigeben.
Du kannst aber vorher abfragen, wie viel Speicher Dir zur Verfügung steht, bzw wie viel noch frei ist:

Siehe freeMemory() und maxMemory() http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html

Am besten versuchst Du aber erst gar nicht, möglichst viel Speicher zu nutzen, sondern schreibst die Ergebnisse häufig genug auf die Platte.
Eine Möglichkeit wäre auch noch mit http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ref/SoftReference.html zu arbeiten. Objekte, die so referenziert werden, werden vom GC gelöscht, wenn Speicher benötigt wird. Du kannst sie dann in der finalize() Methode vorher speichern.
Der Nachteil dabei ist, dass Du nicht weist, in welcher Reihenfolge der GC aufräumt. Aber er wird es genau dann tun, wenn der freie Speicher knapp wird.

Grüße

Daniel