jb2works.com
>
Java Memory Leak FAQ
>
Top Five
eng
|
de
Warum wir einen Datenkrebs haben
Die Top Five um es zu vermeiden
1 Register / Unregister
Wenn Du ein Objekt registrierst, vergess nicht das Unregistrieren.
Wenn Du Observers zu Observables addierst, nimm sie auch wieder weg.
Wenn Du Actions auf GUI Components installierst, tu sie auch wieder deinstallieren.
2 Static
Vermeide statische Felder.
Wenn Du sie dennoch brauchst, denk ans aufraeumen.
Vermeide Singletons. Wenn Singletons trotzdem Sinn machen, denk ans aufraeumen.
3 Caches
Versuche Caches zu vermeiden.
Wenn Du sie _wirklich_ brauchst, begrenze sie.
Versuche Pools zu vermeiden.
Wenn Du sie _wirklich_ brauchst, begrenze sie.
4 Dispose
Wenn Du eine entgueltige Aufraeum-Routine fuer ein Objekt brauchst, implementiere ein dispose().
Wenn Du dispose() implementierst, sorge dafuer, dass es gerufen wird.
Sorge dafuer, dass kein Objekt mehr benutzt wird, nachdem sein dispose() gerufen wurde.
Sorge dafuer, dass kein dispose() zweimal gerufen wird.
Du kannst ein Interface Disposable fuer eine generische Aufraeumroutine nutzen.
5 Variables und References
Vermeide, auf das gleiche Objekt zweimal zu verweisen.
Denke ans Aufraeumen von class and member variables.
Wenn Du daran denkst, dann bist Du dabei, ueber den Lebenszyklus der referenzierten Objekte
nachzudenken!
Eine einfache Regel
Verantwortlich fuers Aufraeumen ist das Objekt, dass die aufzuraeumende Referenz erzeugt hat.
Kontrolliere deinen Heap
Kontrolliere deinen Heap von Zeit zu Zeit..
Bevor Du kontrollierst, schliesse Views.
Gebe Histories und lokale Aenderungen frei. (Save, Undo).
Leere Caches soweit moeglich.
Rufe die Garbage-Collection.
Unsortiert
Falls Du eine WeakHashMap benutzt, das Key-Objekt darf nicht ueber das Value-Objekt
fest erreichbar sein.
Tu nicht finalize() nutzen. Finalizers sind keine Destructors! Nichts macht Sinn, um in finalizers
getan zu werden. Akzeptiere dies.
- Geschichten werden vom wahrem Leben geschrieben. -
| |
|