2013-05-27 33 views
9

read下面的代码导致内存泄漏为Level类内存泄漏保持从类加载器外部向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中有一些其他实例吗?

+0

“Level类如何在这个特定的类加载器之外加载?” - 标准类通常被通过类加载器的层次结构使用系统类加载器加载。不过,我不确定这里是否有泄漏。你能提供,告诉有一个文档的参考? –

+0

不要打扰 - 在这里找到它:http://frankkieviet.blogspot.com/2006/10/classloader-leaks-dreaded-permgen-space.html –

+0

[Here](http://bugs.sun.com/ view_bug.do?bug_id = 6543126) –

回答

2

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