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