我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 中有一些其他实例吗?
最佳答案
有很多类加载器泄漏的来源:This part关于这个问题的博客系列的一部分,列举了一些罪魁祸首。
关于java - Logger引起的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16769074/