关于引用
本帖最后由 cup_t 于 2013-08-28 11:22:34 编辑 这种情况下,a和b是否会被垃圾回收器回收呢。
A.java
public class A {
B b;
public void setB(B b) {
this.b = b;
}
}
public class B {
A a;
public B(A a) {
super();
this.a = a;
}
}
然后在某个地方有如下这么一段代码,这样是不是a和b所占的内存就永远不会被释放呢?
[code=java]
A a = new A();
B b = new B(a);
a.setB(b);
package test;
public class Test {
private Test obj;
private String iName;
Test(String name) {
iName = name;
}
void setObj(Test o) {
obj = o;
}
@Override
public void finalize() {
System.out.println("gc!" + iName);
}
public static void main(final String[] args) throws Exception {
for (int i = 0; i < 1000; i++) {
Test a = new Test("a");
Test b = new Test("b");
a.setObj(b);
b.setObj(a);
}
System.gc();
Thread.sleep(1000);
}
}