2012-12-20 20 views
7

In der Beschreibung der getLogger() Methode des LogManager wird geschrieben wie folgt:LogManager und Garbage Collector

„(...) Logger, die mit dem String name jederzeit gesammelten Müll werden kann, wenn Es gibt keinen starken Verweis auf den Logger. Der Aufrufer dieser Methode muss den Rückgabewert auf null überprüfen, um den Fall, in dem der Logger mit Garbage Collection gesammelt wurde, ordnungsgemäß zu behandeln. "

Wie ist es möglich, dass der GC den Logger löschen kann, da LogManager alle Verweise auf alle Logger behalten muss, um die Namen der Logger auflösen zu können?

Ist das nicht ein bisschen komisch, dass Java API eine Situation erlaubt, dass ich zu Beginn meiner App meine Logger erstelle und einrichte, aber vergiss, refrences zu behalten, und später, wenn ich Logger.getLogger ('someName ') Ich werde neue, default ein instad meiner Logger, die ich eingerichtet habe, bekommen?

Antwort

7

Wie ist es möglich, dass der GC den Logger löschen kann, da LogManager alle Verweise auf alle Logger behalten muss, um die Namen der Logger auflösen zu können?

Es ist möglich, wenn LogManager hält weak references zu den Loggern (was ich glaube, es tut).

Ist das nicht ein wenig seltsam, dass Java-API eine Situation ermöglicht es, dass ich am Anfang meiner app erstellen und mein Setup Loggers aber vergessen refrences zu halten, und dann später, wenn ich Logger.getLogger verwenden ('someName') Ich werde einen neuen Standard meiner Logger bekommen, den ich eingerichtet habe?

Man könnte argumentieren, dass wenn Sie sich für Ihren Logger interessieren, sollten Sie einen Verweis darauf behalten. Die documentation ist sehr klar, dass:

Die Anwendung sollte einen eigenen Verweis auf das Logger-Objekt beibehalten, um zu vermeiden, dass Müll gesammelt wird. Der LogManager behält möglicherweise nur eine schwache Referenz.

Verwandte Themen