如果我向外部集合添加一个整型字段,那么我是否发布了一个?
考虑如下:
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
从集合中移除之前,不会对a进行垃圾收集,因为我们可能仍然想要调用b.f()
,而这将需要A.this
现在用Integer
替换B
,这样我们就有了
public static Set<B> set;
class A {
private Integer b = new Integer(6000);
}
再一次
A a = new A();
set.add(b);
现在,在相同的场景中,A
也永远不会被垃圾收集,直到Integer b
从集合中移除吗
# 1 楼答案
在
您正在复制对
n
引用的整数(可能是)的引用。对a
引用的对象没有隐式或显式的反向引用如果
a
引用的对象符合GC的条件,则在GC运行时将运行其finalize
方法