考虑一下:
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
之前也永远不会被垃圾收集?
答案 0 :(得分:2)
在
set.add(a.n);
您正在复制对n
引用的整数(可能是)的引用。对a
引用的对象没有隐式或显式的反向引用。
如果a
引用的对象符合GC条件,则GC运行时将运行finalize
方法。