Java静态类生存期
如何收集Java静态类垃圾Java静态类生存期,java,jsp,Java,Jsp,如何收集Java静态类垃圾 我有一个静态类,它包含一个静态对象。如果我将对象设置为null,那么它将被垃圾收集。我不理解静态类的生命周期。程序关闭时是否进行垃圾收集?静态类始终是可访问的,因此从不进行垃圾收集 现在,如果您的静态类有一个非静态类的字段和实例,并且该字段和实例被设置为null,那么该内存将被释放,因为该对象不再被引用 比如说 public static StaticClass { public static InstanceClass myInstanceClass; }
我有一个静态类,它包含一个静态对象。如果我将对象设置为null,那么它将被垃圾收集。我不理解静态类的生命周期。程序关闭时是否进行垃圾收集?静态类始终是可访问的,因此从不进行垃圾收集 现在,如果您的静态类有一个非静态类的字段和实例,并且该字段和实例被设置为null,那么该内存将被释放,因为该对象不再被引用 比如说
public static StaticClass
{
public static InstanceClass myInstanceClass;
}
如果将
myInstanceClass
设置为null,则它将被垃圾收集 静态对象与类定义绑定,而不是与类实例绑定。
它们在类通过类加载器加载后立即生效,只有在类卸载时才会被销毁 -
静态
类只能在类级别而不是包级别,我们可以说静态内部类
或顶级类
-然后类加载器加载静态
类
-现在静态
类将进入内存,直到加载它的加载程序仍在运行,或者除非它没有被加载程序卸载。请考虑以下方法:
每个对象都有对其类的引用
每个类都有一个对其类装入器的引用
每个类装入器都有一个对它曾经装入的每个类的引用
这整团乱七八糟的东西有可能变成垃圾。这是卸载/重新加载应用程序的基础(在servlet容器中)。但是,如果有一个对象仍然被引用,则类加载器及其所有类都无法卸载,因此实现应用程序卸载并非易事。取决于“静态类”的含义。所有顶级类的行为也都类似于静态类……谢谢,什么时候卸载类?@w0051977:当您的类脱离上下文时,例如,如果您在单机模式下运行程序,并且程序被终止,或者如果您有一个部署了静态类的web应用程序,并且您取消了该应用程序的部署。总之,当加载上下文本身被破坏时,它被卸载。谢谢,如果它是一个web应用程序,那么我假设“加载上下文”是windows进程?@w0051977:否。每个部署的web应用程序都有自己的类加载器,当应用程序被取消部署时,类加载器及其所有类都被GCed,即使Java进程没有终止,我知道myInstanceClass是如何以及何时被垃圾收集的。我不明白StaticClass什么时候被垃圾收集。一定要从内存中卸载吗?@w0051977当您关闭程序时,它将be@w0051977尝试将静态类设置为null@SamIam:不能将类设置为null。你在胡说八道。我想说的正是这一点。将静态类设置为null甚至没有意义,因此,在程序终止hanks之前对其进行垃圾收集是没有意义的。我想您不知道这在.NET语言中是否相同。我有Java背景,但这些天我在用.NET语言编程。为什么不发布一个.NET问题呢。