我知道静态字段可能会导致内存泄漏,因为它们不会被GC。
但是当有一个部署在容器(例如Tomcat)中的Web应用程序时,每个应用程序都有自己的ClassLoader,并且可以取消部署。
我的问题是,垃圾收集器声明由将要卸载的类的静态成员引用的对象吗?
最简单的情况是单例(由引用self的静态变量实现),如果取消部署应用程序,它会被GC吗?
答案 0 :(得分:2)
这可能会回答你的问题:
当应用程序停止时,Tomcat(甚至在6.0.24之前)会使应用程序无效 由类加载的类的所有静态类变量的值 WebAppClassLoader。在某些情况下,它可能会修复类加载器泄漏(for 例子,因为自定义ThreadLocal类,见上文),但即使 我们仍然有泄漏,它可能会减少内存丢失量
您可以阅读更多here
干杯!!