OutOfMemoryError, static, Collections
Es ist zwar ein altbekanntes Problem, aber:
Ein immer wieder gern gemachte Fehler ist das Verwenden von statischen Collections, beispielsweise Maps.
Das führt schnell zu OutOfMemory-Fehlern – da man sich um das leeren einer statischen Map selber kümmern muss, wenn nicht sicher ist, dass die Elementanzahl begrenzt ist.
Wenn man unbedingt static braucht und nicht selbst aufräumen will, kann eine WeakHashMap zum Einsatz kommen, beispielsweise so:
... private static final Map<String,MyType> MY_WEAK_MAP = new WeakHashMap<String,MyType>(); ...
Das geht auch mit Synchronization:
... private static final Map<String,MyType> MY_WEAK_MAP = Collections.synchronizedMap(new WeakHashMap<String,MyType>()); ...
Aus einer WeakHashMap werden die Einträge von der garbage collection entfernt, sobald alle anderen Referenzen auf den Eintrag verwaist sind.
Das ist zum Beispiel dann hilfreich, wenn Einträge nur innerhalb des aktuellen Threads referenziert werden. Wobei man in diesem Fall auch Threadlocales verwenden könnte…
This entry was posted on Wednesday, February 13th, 2008 at 17:48. Posted in: java. You can follow any responses to this entry through the RSS 2.0feed. You can leave a response, or trackback from your own site.
