1

我知道静态字段会导致内存泄漏,因为它们不会被 GC。

但是当有一个Web应用部署在一个容器中(比如Tomcat)时,每个应用都有自己的ClassLoader,可以取消部署。

我的问题是,垃圾收集器是否声明将要卸载的类的静态成员引用的对象?

最简单的情况是单例(通过引用self的静态变量实现),如果取消部署应用程序,它会被GC吗?

4

1 回答 1

2

这可能会回答您的问题:

当应用程序停止时,Tomcat(甚至在 6.0.24 之前)会使 WebAppClassLoader 加载的类的所有静态类变量的值无效。在某些情况下,它可能会修复类加载器泄漏(例如,由于自定义 ThreadLocal 类,见上文),但即使我们仍然存在泄漏,它也可能会减少丢失的内存量

你可以在这里阅读更多

干杯!!

于 2013-10-23T17:52:54.487 回答