当对象是符合垃圾收集器?(when an object is eligible for a garb

2019-07-31 06:08发布

考虑此示例代码:

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的方法被调用,之后行并在第5行创建的对象成为可用于垃圾回收?

A. 5号线

B. 6号线

C. 7号线

D. 8号线

E. 9号线

F. 10号线

答案:d

为什么d? 这是真的,当执行6号线,5号线创建对象的实例变种O与局部变量O和当8号线执行现在仅由当地的裁判VARØ引用的对象,那么为什么答案是现在参看是d,并执行第9行之后会发生什么? 谢谢。

Answer 1:

这个问题是IMO混乱的主要原因是,有两个变量命名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号线,对象#1是符合回收。



Answer 2:

现在的问题是有点混乱,因为它是线3被称为第二时间的对象是符合条件的,因为它清除所述第二参考后o



文章来源: when an object is eligible for a garbage collector?