Effective Java: WeakReferences

Der vorangegangene Teil dieser Reihe zu Memory Leaks in Java ging der Frage nach, wie Memory Leaks entstehen und mit welchen Techniken und Tools man nach ihnen suchen kann. Dieses Mal wollen wir uns WeakReferences genauer ansehen. Mit ihrer Hilfe ist es möglich, Situationen zu vermeiden, in denen Memory Leaks entstehen können.
Gehen wir noch einmal zurück zu dem Beispiel eines Memory Leaks, das wir ausführlich im ersten Artikel zum Thema Memory Leaks diskutiert haben. In dem Beispiel haben wir einen rudimentären Server auf Basis der mit Java 7 eingeführten AsynchronousSocketChannels implementiert. Das Memory Leak entstand dadurch, dass wir im Server für jeden neuen Client Verwaltungsinformationen in einer Map gespeichert und diese clientspezifischen Map-Einträge nicht nach der Beendigung der Kommunikation mit den jeweiligen Clients wieder gelöscht haben. Es ist offensichtlich, dass sich die Map mit jedem neuen Client vergrößert. Erzeugt man also in einem Testprogramm viele Clients hintereinander, so stürzt der Server irgendwann mit einem OutOfMemoryError ab.
Hinterlasse einen Kommentar