Given:
1. public class GC{
2. private Object o;
3. private void doSomethingElse(Object obj){o = obj;}
4. public void doSomething(){
5. Object o = new Object();
6. doSomethingElse(o);
7. o = new Object();
8. doSomethingElse(null);
9. o = null;
10. }
11. }
When the doSomething method is called, after which line does the Object created in line 5 become available for garbage collection?
选项为:
A. Line 5
B. Line 6
C. Line 7
D. Line 8
E. Line 9
F. Line 10
我个人认为选择E,可是答案给的是D,我有些疑惑,请高手给我解释下。
------解决思路----------------------
Line 5 生成一个局部的对象o
Line 6 把上一句生成的对象o传入doSomethingElse()方法,赋给了属性o
Line 7 又生成一个局部对象o
Line 8 调用doSomethingElse()方法,传入null,使属性o为null,从而使对Line 5生成的局部对象的引用为空,这时就可回收了。
------解决思路----------------------
line2的o指向了line5的o,所以line5的o暂时不会被回收
------解决思路----------------------
我认为,这种强引用类型,是将引用设为null后,gc会回收;若不设为null,过程过一段时间也会回收。
------解决思路----------------------
强引用如果不撤销引用,对象永远也不会被虚拟机回收
------解决思路----------------------
9行是个废代码,因为创建的对象到8行后,生命周期就结束了。