什么时候一个对象适合垃圾收集器?

2024-01-09

考虑这个示例代码:

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. }

当调用doSomething方法时,在哪一行之后创建的Object 5 可用于垃圾收集吗?

A、5号线

B、6号线

C、7号线

D、8号线

E、9号线

F、10号线

答案:D

为什么是D?确实,当执行第 6 行时,第 5 行中创建的对象现在由实例 var o 和本地 var o 引用,而当执行第 8 行时,该对象现在仅由本地 ref var o 引用,所以为什么答案是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

因此,在第 8 行(或执行后),Object#1 符合收集条件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么时候一个对象适合垃圾收集器? 的相关文章

随机推荐