Jav*_*yer 4 java garbage-collection scjp
考虑以下示例代码:
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. }
Run Code Online (Sandbox Code Playgroud)
当调用doSomething方法时,在第5行中创建的Object可用于垃圾收集之后是哪一行?
A.第5行
B.第6行
C.第7行
D.第8行
E.第9行
F.第10行
答案:D
为什么D?确实,当第6行被执行时,第5行中创建的对象现在被实例var o和本地var o引用,当第8行被执行时,对象现在只被本地引用引用,所以为什么要回答是D和第9行执行后会发生什么?谢谢.
这个问题让IMO感到困惑的主要原因是有2个变量名为o.一个是实例变量o,另一个是o方法内的局部变量doSomething().
Time instance var o local var o
Before Line 5: null
Line 5: null Object#1
Line 6: Object#1 Object#1
Line 7: Object#1 Object#2
Line 8: null Object#2 <- No more references to Object#1
Run Code Online (Sandbox Code Playgroud)
因此,在第8行(或执行后),对象#1有资格进行收集.
| 归档时间: |
|
| 查看次数: |
2640 次 |
| 最近记录: |