日期:2014-05-20  浏览次数:20654 次

一道关于垃圾收集器的面试题
《JAVA程序员面试宝典》86页,一道选择题,不太明白答案,望指教,题目是这样的:
下列代码中,第几行的obj符合垃圾收集器的收集标准?[SAP公司2005年10月面试题]
1. Object aobj = new Object();
2. Object bobj = new Object();
3. Object cobj = new Object();
4. aobj = bobj;
5. aobj = cobj;
6. cobj = null;
7. aobj = null;
答案是第七行,因为cobj所指向的地址空间已经被完全赋予了空值,所以cobj最终符合了垃圾收集器的收集标准。
不太明白为什么aobj所指向的地址空间不能被回收吗?
------解决方案--------------------
很多人都说这题错的
new 了3个Object()对象,abc只是对象的引用
第四行a指向了b,那么a原来指向的对象就没有引用再指向它,而且后面也没有再引用到,所以第四行应该是会回收这个原本是a指向的空置对象
------解决方案--------------------
符合垃圾收集器收集的是对象实体,而不是引用
aobj,bobj,cobj是引用,在栈中,生命周期结束后其地址被回收,与垃圾收集器无关
1,2,3那三个new Object()才是对象实体,失去所有引用的对象实体可能会被回收
4执行后第一个Object不可能再被引用
7执行后第三个Object不可能再被引用
所以如果非要选答案的话应该选1和3