2013-05-27 34 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關於這個問題的博客系列,列舉了一些罪魁禍首。