如何收集Java静态类垃圾?
我有一个静态类,它包含一个静态对象。如果我将对象设置为null,那么它将被垃圾回收。我不了解静态类的生命周期。程序关闭时是否收集垃圾?
答案 0 :(得分:4)
静态对象与类定义绑定,而不与类实例绑定。
一旦你的类加载,它就会通过ClassLoader生效,只有在卸载类时才会被销毁。
答案 1 :(得分:1)
静态类始终可访问,因此永远不会收集垃圾。
现在,如果您的静态类具有非静态类的字段和实例并且设置为null,则该内存将被释放,因为该对象不再被引用。
例如
public static StaticClass
{
public static InstanceClass myInstanceClass;
}
如果将myInstanceClass
设置为null,那么它将被垃圾收集。
答案 2 :(得分:1)
- static
课程只能在课程级别而不是在包级别,我们可以说static inner classes
或Top level classes
。
- 然后由类加载器加载static
类。
- 现在static
类将进入内存,直到加载它的加载程序仍在运行,或者除非加载器没有卸载它。
答案 3 :(得分:1)
想一想:
每个对象都有对其类的引用。
每个类都有对其类加载器的引用。
每个类加载器都引用它已加载的每个类。
这整个混乱的球可能变成垃圾。这是app卸载/重新加载的基础(在servlet容器中)。但是,如果仍有一个对象仍然被引用,则无法卸载类加载器及其所有类,因此实现应用程序卸载并不是一件容易的事。