内存无人认领的静力学

IUn*_*own 2 java

这是我心中想到的一种怀疑,并且想要把它彻底打破.
假设我有以下类作为我的应用程序的一部分加载:

class HeavyClass {
    static final ArrayList list = new ArrayList(100);
}
Run Code Online (Sandbox Code Playgroud)

静态成员的生命周期是否与应用程序对齐,而不管HeavyClass实例发生了什么.
如果静态将自己与不是垃圾收集的类加载器内存(permgen)对齐 - 那么编程习惯用法是确保这样的对象只在需要的基础上消耗(并清理成员);假设我们必须有静态的在所有实例之间共享)

Bev*_*ynQ 6

静态变量存在于类对象的生命周期中.也就是说,它们是在加载类时创建的,通常只有在处理ClassLoader时才会死掉.

如果要将列表附加到HeavyClass您不应该创建的实例,则在方法中static调用将为您提供.list.clear()finalizeunpredictable results

请参阅java语言规范

8.3.1.1.静态字段

如果一个字段被声明为static,那么无论该类最终可以创建多少个实例(可能为零),都只存在该字段的一个化身.初始化类时,静态字段(有时称为类变量)会显示(第12.4节).