Java静态类生命周期

时间:2012-11-19 20:19:02

标签: java jsp

如何收集Java静态类垃圾?

我有一个静态类,它包含一个静态对象。如果我将对象设置为null,那么它将被垃圾回收。我不了解静态类的生命周期。程序关闭时是否收集垃圾?

4 个答案:

答案 0 :(得分:4)

静态对象与类定义绑定,而不与类实例绑定。

一旦你的类加载,它就会通过ClassLoader生效,只有在卸载类时才会被销毁。

答案 1 :(得分:1)

静态类始终可访问,因此永远不会收集垃圾。

现在,如果您的静态类具有非静态类的字段和实例并且设置为null,则该内存将被释放,因为该对象不再被引用。

例如

public static StaticClass
{
    public static InstanceClass myInstanceClass;
}

如果将myInstanceClass设置为null,那么它将被垃圾收集。

答案 2 :(得分:1)

- static课程只能在课程级别而不是在包级别,我们可以说static inner classesTop level classes

- 然后由类加载器加载static类。

- 现在static类将进入内存,直到加载它的加载程序仍在运行,或者除非加载器没有卸载它。

答案 3 :(得分:1)

想一想:

每个对象都有对其类的引用。

每个类都有对其类加载器的引用。

每个类加载器都引用它已加载的每个类

这整个混乱的球可能变成垃圾。这是app卸载/重新加载的基础(在servlet容器中)。但是,如果仍有一个对象仍然被引用,则无法卸载类加载器及其所有类,因此实现应用程序卸载并不是一件容易的事。