记录器导致内存泄漏

时间:2013-05-27 08:22:18

标签: java logging memory-leaks classloader

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中有类似行为的其他实例吗?

1 个答案:

答案 0 :(得分:2)

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