2013-05-27 3 views
9

Я read, что следующий код приводит к утечке памяти в классе уровня содержит ссылку на член CUSTOMLEVEL из-за ClassLoader:утечка памяти вызван Logger

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

[Здесь] (http://bugs.sun.com/ view_bug.do?bug_id=6543126) –

ответ

2

Существует множество источников утечек загрузчиков классов: This part из серии блога по этой проблеме, перечисляет некоторых из виновников.

Смежные вопросы