繁体   English   中英

Java静态类生命周期

[英]Java Static Classes lifetime

如何收集Java静态类垃圾?

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

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

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

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

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

例如

public static StaticClass
{
    public static InstanceClass myInstanceClass;
}

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

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

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

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

想一想:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM