chensifeng 2012-08-08 16:55
浏览 337
已采纳

Garbage Collection问题

class Beta {}  
class Alpha {  
static Beta b1;  
Beta b2;  
}  
public class Tester {  
public static void main(String [] args){  
Beta bt1 = new Beta();        Beta bt2 = new Beta();  
Alpha at1 = new Alpha();     Alpha at2 = new Alpha();  
at1.b1 = b1;  
at1.b2 = b1;  
at2.b2 = b2;  
at1 = null;  bt1 = null;  bt2 = null;   
  //do stuff  
}

请问到了第14行有哪些对象有资格被GC搜集?

 

多谢指点!

  • 写回答

4条回答 默认 最新

  • clxy大叔 2012-08-10 15:36
    关注

    总结下,希望这次不要再有错误了,哈。

    [code="java"]
    class Beta {
    }

    class Alpha {
    static Beta b1;
    Beta b2;
    }

    public class Tester {
    public static void main(String[] args) {
    Beta bt1 = new Beta();
    Beta bt2 = new Beta();
    Alpha at1 = new Alpha();
    Alpha at2 = new Alpha();
    at1.b1 = bt1;
    at1.b2 = bt1;
    at2.b2 = bt2;
    at1 = null;
    bt1 = null;
    bt2 = null;
    // do stuff
    }
    }[/code]

    问:在第21行,有哪些实例将会被GC回收?
    答:

    • 18行的at1 = null,会导致13行创建的实例将会被回收。
      因为再没有对这个实例的引用。

    • 19行的bt1 = null,不会导致11行创建的实例被回收。
      因为11行的实例仍然被Alpha这个类的静态变量引用着。
      (该静态变量生活在Alpha的Class的实例中,该实例直到Alpha类被jvm卸载——基本上永远不会发生——时才会消失。网上有根据编译后的class中分析出,静态变量和常量放在一起的。)

    • 20行的bt2 = null,不会导致12行创建的实例被回收。
      因为at2的b2仍然保持对该实例的引用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开