【发布时间】: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