2

Java 静态类垃圾是如何收集的?

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

4

4 回答 4

4

静态对象与类定义相关联,而不与类实例相关联。

它们在您的类通过 ClassLoader 加载后立即生效,并且仅在类卸载时销毁。

于 2012-11-19T20:21:44.470 回答
1

静态类总是可以访问的,因此永远不会被垃圾回收。

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

例如

public static StaticClass
{
    public static InstanceClass myInstanceClass;
}

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

于 2012-11-19T20:20:11.367 回答
1

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

-然后static类加载器加载一个类。

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

于 2012-11-19T20:32:08.143 回答
1

这样想:

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

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

每个类加载器都有一个对它曾经加载过的每个类的引用。

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

于 2012-11-19T20:35:57.103 回答