Achtung Java: Memory Leaks durch Thread Objekte (Lösung)
Nach meiner Quizzfrage gab es einige Diskussionen über das Problem. Meine Analyse fand ein Problem im Konstruktur der Klasse Thread. Wannimmer ein Thread Objekt erzeugt wird, registriert es sich an der zugehörigen (aktuellen) ThreadGroup. Das hat den Effekt dass eine Referenz auf den Thread gehalten wird, das Objekt wird nie frei gegeben.
Gitta Zahn und Steffen Ramlov haben das Problem sofort gefunden, Stefan Matthias Aust hat darauf hingeweisen, dass aktuelle Java Versionen (1.5 und 1.6) dieses Problem nicht mehr haben, dort wird der vorbereitete Thread nicht zu einer Liste hinzugefügt. Details dazu in de.comp.lang.java.
Unabhängig davon ist es aber generell ein schlechtes Design von Thread zu erben, insbesondere wenn man plant den Thread nicht zu starten. Das Runnable Interface hat hier deutlich weniger Seiteneffekte, und man ist wesentlich flexibler mit der Erzeugung und dem Pooling der Threads.
Comments
Display comments as Linear | Threaded