【问题标题】:LogManager and Garbage CollectorLogManager 和垃圾收集器
【发布时间】:2012-12-20 17:59:18
【问题描述】:

在LogManager的getLogger()方法的描述中是这样写的:

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

GC 怎么可能擦除 Logger,因为 LogManager 必须保留对所有 Logger 的所有引用才能解析 Logger 的名称?

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

【问题讨论】:

    标签: java garbage-collection


    【解决方案1】:

    GC 怎么可能擦除 Logger,因为 LogManager 必须保留对所有 Logger 的所有引用才能解析 Logger 的名称?

    如果LogManagerweak references 保留给记录器,这是可能的(我相信确实如此)。

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

    有人可能会争辩说,如果你关心你的记录器,你应该保留对它的引用。 documentation 对此非常清楚:

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

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 2015-03-14
      • 2018-12-30
      • 1970-01-01
      • 2011-01-06
      • 2015-07-10
      • 2010-12-23
      • 2015-11-26
      • 2013-01-17
      相关资源
      最近更新 更多