为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Smart猫小萌 2019-07-10 16:14:17
是否为垃圾收集打开静态字段?给定仅用于程序设置的假设实用程序类:class MyUtils {    private static MyObject myObject = new MyObject();    /*package*/static boolean doStuff(Params... params) {        // do stuff with myObject and params...    }}当MyObject不再被使用时,它会被垃圾收集吗?或者它会在程序的生命周期中一直存在吗?
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

加载类时,不能为垃圾收集选择静态变量。当相应的类加载器(负责加载该类)本身被收集为垃圾时,可以收集它们。

检查一下JLS第12.7节-卸载类和接口

一个类或接口可以卸载的当且仅当它的定义类装入器可以被垃圾回收器回收[.]引导加载程序加载的类和接口可能不会被卸载。


查看完整回答
反对 回复 2019-07-10
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

如果您希望使用临时对象进行静态初始化,则可以使用静态初始化块。

class MyUtils {
   static
   {
      MyObject myObject = new MyObject();
      doStuff(myObject, params);
   }

   static boolean doStuff(MyObject myObject, Params... params) {
       // do stuff with myObject and params...
   }}

由于静态初始化块是一种特殊的静态方法,所以myObject是一个局部变量,可以在块完成执行后进行垃圾收集。


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 337 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号