【问题标题】:Memory leak caused by LoggerLogger 导致的内存泄漏
【发布时间】:2013-05-27 08:22:17
【问题描述】:

read 认为以下代码会导致内存泄漏,因为 Level 类从 Classloader 外部持有对 CUSTOMLEVEL 成员的引用:

public class LeakServlet extends HttpServlet {
  private static final String STATICNAME = "This leaks!";
  private static final Level CUSTOMLEVEL = new Level("test", 550) {}; // anon class!

  protected void doGet(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
      Logger.getLogger("test").log(CUSTOMLEVEL, "doGet called");
  }
}

问题是如何在这个特定的类加载器之外加载 Level 类?
我可以在 java API 中有一些其他类似行为的实例吗?

【问题讨论】:

  • "Level 类是如何在这个特定的类加载器之外加载的?" - 标准类通常通过类加载器的层次结构使用系统类加载器加载。但是,我不确定这里是否存在泄漏。您能否提供一份说明存在的文档的参考资料?
  • 别打扰 - 在这里找到它:frankkieviet.blogspot.com/2006/10/…
  • 是的 - 我猜如果不是引导类加载器,它会是一个更高的类加载器。但是,是否有任何其他已知的 API 类会导致我们应该注意的类加载器内存泄漏?

标签: java logging memory-leaks classloader


【解决方案1】:

类加载器泄漏的来源有很多:This part 的一个关于该问题的博客系列,列举了一些罪魁祸首。

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 2014-06-07
    • 2013-11-20
    • 2011-10-28
    • 2016-01-18
    • 2012-12-13
    • 1970-01-01
    • 2011-01-08
    • 2011-02-01
    相关资源
    最近更新 更多