猿问

是否为垃圾收集打开静态字段?

是否为垃圾收集打开静态字段?

给定仅用于程序设置的假设实用程序类:

class MyUtils {
   private static MyObject myObject = new MyObject();
   /*package*/static boolean doStuff(Params... params) {
       // do stuff with myObject and params...
   }}

当MyObject不再被使用时,它会被垃圾收集吗?或者它会在程序的生命周期中一直存在吗?



Smart猫小萌
浏览 338回答 3
3回答

holdtom

加载类时,不能为垃圾收集选择静态变量。当相应的类加载器(负责加载该类)本身被收集为垃圾时,可以收集它们。检查一下JLS第12.7节-卸载类和接口一个类或接口可以卸载的当且仅当它的定义类装入器可以被垃圾回收器回收[.]引导加载程序加载的类和接口可能不会被卸载。

MMMHUHU

如果您希望使用临时对象进行静态初始化,则可以使用静态初始化块。class MyUtils {    static    {       MyObject myObject = new MyObject();       doStuff(myObject, params);    }    static boolean doStuff(MyObject myObject, Params... params) {        // do stuff with myObject and params...    }}由于静态初始化块是一种特殊的静态方法,所以myObject是一个局部变量,可以在块完成执行后进行垃圾收集。
随时随地看视频慕课网APP

相关分类

Java
我要回答