如果我在外部集合中添加一个Integer字段,我会发布这个吗?

时间:2014-09-05 18:52:24

标签: java

考虑一下:

public static Set<B> set;

class A {
  private B b = new B();
  void someMethod();
}

class B {
 public void f() { A.this.someMethod(); }
}

然后我正在做

A a  = new A();
set.add(b);

现在我相信在b从集合中移除之前不会进行垃圾回收,因为我们可能仍然想要调用b.f(),这需要A.this

现在将B替换为Integer,以便我们

public static Set<B> set;

class A {
   private Integer b = new Integer(6000);
}

再次

A a  = new A();
set.add(b);

现在,在同一场景中,A在从集合中移除Integer b之前也永远不会被垃圾收集?

1 个答案:

答案 0 :(得分:2)

set.add(a.n);

您正在复制对n引用的整数(可能是)的引用。对a引用的对象没有隐式或显式的反向引用。

如果a引用的对象符合GC条件,则GC运行时将运行finalize方法。