LogManager和垃圾收集器

时间:2012-12-20 17:59:19

标签: java garbage-collection

在LogManager的getLogger()方法的描述中,它写成如下:

“(...)如果没有对Logger的强引用,则可以随时对与String名称关联的记录器进行垃圾回收。此方法的调用者必须检查null的返回值,以便正确处理Logger被垃圾收集的情况。“

GC如何可以擦除记录器,因为LogManager必须保留对所有记录器的所有引用才能解析记录器的名称?

这有点奇怪,Java API允许一种情况,在我的应用程序开始时我创建和设置我的Loggers但忘记保留refrence,然后如果我使用Logger.getLogger('someName' )我将建立新的,默认的一个我记录器的instad?

1 个答案:

答案 0 :(得分:7)

  

GC如何可以擦除记录器,因为LogManager必须保留对所有记录器的所有引用才能解析记录器的名称?

如果LogManagerweak references保留给记录器(我相信它会这样做),就有可能。

  

这有点奇怪,Java API允许一种情况,在我的应用程序开始时我创建和设置我的Loggers但忘记保留refrence,然后如果我使用Logger.getLogger('someName' )我将建立新的,默认的一个我记录器的instad?

有人可能会说,如果你关心你的记录器,你应该保留它的参考。 documentation非常明确:

  

应用程序应保留自己对Logger对象的引用,以避免它被垃圾回收。 LogManager可能只保留弱引用。