当前位置: 技术问答>java相关
SCJP模拟题 about GC
来源: 互联网 发布时间:2015-03-30
本文导语: 41. Given: 1. public class X ( 2. public object m () { 3. object o = new float (3.14F); 4. object [] oa = new object [1]; 5. oa[0]= o; 6. o = null; 7. return oa[0]; 8. } 9. } When is the float object created in line 3, eligi...
41. Given:
1. public class X (
2. public object m () {
3. object o = new float (3.14F);
4. object [] oa = new object [1];
5. oa[0]= o;
6. o = null;
7. return oa[0];
8. }
9. }
When is the float object created in line 3, eligible for garbage collection?
A. Just after line 5
B. Just after line 6
C. Just after line 7 (that is, as the method returns)
D. Never in this method
答案是D
我觉得C也没有错啊,谁能解释一下?
1. public class X (
2. public object m () {
3. object o = new float (3.14F);
4. object [] oa = new object [1];
5. oa[0]= o;
6. o = null;
7. return oa[0];
8. }
9. }
When is the float object created in line 3, eligible for garbage collection?
A. Just after line 5
B. Just after line 6
C. Just after line 7 (that is, as the method returns)
D. Never in this method
答案是D
我觉得C也没有错啊,谁能解释一下?
|
以前有个帖子的问题和这个非常的类似。
垃圾收集的条件是没有再指向它的引用,第三行创建的Float对象最开始被赋值给o,随后在第5行又被赋值给oa[0],然后它的一个引用由于第6行的赋值而消失,从引用计数的观点来看,Float在的3行计数为1,第5行为2,第6行后1,第7行后不定,但是还有一个弱引用(可能不确切,方法返回的引用部分我看得不是很明白),因此最少也是1,因此第7行方法返回后不符合垃圾收集条件,最起码不一定符合。
垃圾收集的条件是没有再指向它的引用,第三行创建的Float对象最开始被赋值给o,随后在第5行又被赋值给oa[0],然后它的一个引用由于第6行的赋值而消失,从引用计数的观点来看,Float在的3行计数为1,第5行为2,第6行后1,第7行后不定,但是还有一个弱引用(可能不确切,方法返回的引用部分我看得不是很明白),因此最少也是1,因此第7行方法返回后不符合垃圾收集条件,最起码不一定符合。