一道SCJP题晚上结贴

时间:2022-02-03 17:47:02
class Beta{}
class Alpha{
    static Beta b1;
    Beta b2;
}
public class Tester{
    public static void main(String[] args){
        Beta b1=new Beta();     Beta b2=new Beta(); 
        Alpha a1=new Alpha();   Alpha a2=new Alpha();
        a1.b1=b1;        
        a1.b2=b1;
        a1.b2=b2;
        a1=nill; b1=null; b2=nill;
        //do stuff
    }
}

问题:When line 16 is reached,how many objects will be eligible for garbage collection?
求各位大大解释,晚上结贴给分

9 个解决方案

#1


问题的英文是不是问·有多少个对象被创建出来?
如果是的话我的回答是·4个··如果不是··请楼主翻译一下先··英文太烂了·· 一道SCJP题晚上结贴

#2


引用 1 楼 cenhuineng 的回复:
问题的英文是不是问·有多少个对象被创建出来?
如果是的话我的回答是·4个··如果不是··请楼主翻译一下先··英文太烂了··


额……有多少个对象符合垃圾回收被准

#3


垃圾回收标准

#4


看见gc了

#5


是2个,b2,a1.这两个都好理解,因为这两个属性都是对象属性,所以,当执行a1=null,b2=null后,都变为垃圾了。可能难理解的是也执行了b1=null,那么b1为什么不是垃圾对象呢?原因是还有Alpha的类属性b1指向他,所以b1这个对象,并不是垃圾对象!

#6


引用 5 楼 hudie1234567 的回复:
是2个,b2,a1.这两个都好理解,因为这两个属性都是对象属性,所以,当执行a1=null,b2=null后,都变为垃圾了。可能难理解的是也执行了b1=null,那么b1为什么不是垃圾对象呢?原因是还有Alpha的类属性b1指向他,所以b1这个对象,并不是垃圾对象!


来迟了一步···让这兄弟先说了··

#7


该回复于2010-10-18 10:21:27被版主删除

#8


引用 5 楼 hudie1234567 的回复:
是2个,b2,a1.这两个都好理解,因为这两个属性都是对象属性,所以,当执行a1=null,b2=null后,都变为垃圾了。可能难理解的是也执行了b1=null,那么b1为什么不是垃圾对象呢?原因是还有Alpha的类属性b1指向他,所以b1这个对象,并不是垃圾对象!

SCJP给出的答案是1,不过看了你的话后明白了b1的问题,就是不晓得b2,a1中哪个不是垃圾对象。

#9


难道是a2隐含存在可以调用b2,所以b2不是垃圾对象,d2=null这句话完全没用的?

#1


问题的英文是不是问·有多少个对象被创建出来?
如果是的话我的回答是·4个··如果不是··请楼主翻译一下先··英文太烂了·· 一道SCJP题晚上结贴

#2


引用 1 楼 cenhuineng 的回复:
问题的英文是不是问·有多少个对象被创建出来?
如果是的话我的回答是·4个··如果不是··请楼主翻译一下先··英文太烂了··


额……有多少个对象符合垃圾回收被准

#3


垃圾回收标准

#4


看见gc了

#5


是2个,b2,a1.这两个都好理解,因为这两个属性都是对象属性,所以,当执行a1=null,b2=null后,都变为垃圾了。可能难理解的是也执行了b1=null,那么b1为什么不是垃圾对象呢?原因是还有Alpha的类属性b1指向他,所以b1这个对象,并不是垃圾对象!

#6


引用 5 楼 hudie1234567 的回复:
是2个,b2,a1.这两个都好理解,因为这两个属性都是对象属性,所以,当执行a1=null,b2=null后,都变为垃圾了。可能难理解的是也执行了b1=null,那么b1为什么不是垃圾对象呢?原因是还有Alpha的类属性b1指向他,所以b1这个对象,并不是垃圾对象!


来迟了一步···让这兄弟先说了··

#7


该回复于2010-10-18 10:21:27被版主删除

#8


引用 5 楼 hudie1234567 的回复:
是2个,b2,a1.这两个都好理解,因为这两个属性都是对象属性,所以,当执行a1=null,b2=null后,都变为垃圾了。可能难理解的是也执行了b1=null,那么b1为什么不是垃圾对象呢?原因是还有Alpha的类属性b1指向他,所以b1这个对象,并不是垃圾对象!

SCJP给出的答案是1,不过看了你的话后明白了b1的问题,就是不晓得b2,a1中哪个不是垃圾对象。

#9


难道是a2隐含存在可以调用b2,所以b2不是垃圾对象,d2=null这句话完全没用的?