【发布时间】:2013-09-02 07:31:10
【问题描述】:
在这个链接here
它们描述了使用类加载器时的内存泄漏。现在这条评论:
只有当没有其他东西引用它时,垃圾收集器才会删除一个类加载器。所有类都持有对其类加载器的引用,所有对象都持有对其类的引用。因此,如果应用程序被卸载但其中一个对象仍被持有(例如,由缓存或线程局部变量持有),则垃圾收集器无法删除底层类加载器!
我有点理解。但在他们说的部分:
(例如,通过缓存或线程局部变量)
我是否正确地说缓存是指静态引用,而线程本地是指非静态线程本地变量。我这样说是因为线程局部内存泄漏的所有代码解释都将线程局部变量设为静态。比如这个问题in SO
我对关于缓存的评论的另一个问题是:当应用程序停止时,静态变量将被 GC-ed,那么为什么会出现问题?
【问题讨论】:
-
您介意将其标记为 Java 还是您的问题也适用于其他 GC,例如 .Net 的?
标签: java garbage-collection classloader thread-local