[英]Java Static Classes lifetime
如何收集Java静态类垃圾?
我有一个静态类,它包含一个静态对象。 如果我将对象设置为null,那么它将被垃圾回收。 我不了解静态类的生命周期。 程序关闭时是否收集了垃圾?
静态对象与类定义相关联,而不与类实例相关联。
它们一旦通过ClassLoader 加载类就会生效,只有在卸载类时才会销毁它们。
静态类始终可访问,因此永远不会收集垃圾。
现在,如果您的静态类具有其非静态类的字段和实例,并且将其设置为null,则该内存将被释放,因为不再引用该对象。
例如
public static StaticClass
{
public static InstanceClass myInstanceClass;
}
如果你将myInstanceClass
设置为null,那么它将被垃圾收集。
- static
类只能在类级别而不是包级别 ,我们可以说static inner classes
或Top level classes
。
-然后由类加载器加载static
类。
-现在static
类将进入内存,直到加载它的加载器仍在运行或除非加载器没有卸载它。
想一想:
每个对象都有对其类的引用。
每个类都有对其类加载器的引用。
每个类加载器都引用它所加载的每个类 。
这整个混乱的球可能变成垃圾。 这是(在servlet容器中)卸载/重新加载应用程序的基础。 但是,如果仍然有一个对象仍然被引用,则无法卸载类加载器及其所有类,因此实现应用程序卸载并不是一件容易的事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.