vmg*_*vmg 3 java garbage-collection scjp
我被问到一个问题(在这个网站http://scjptest.com/上):在这行代码示例中有多少对象符合垃圾收集的条件//某些代码在这里?
class A {
private B b;
public A() {
this.b = new B(this);
}
}
class B {
private A a;
public B(A a) {
this.a = a;
}
}
public class Test {
public static void main(String args[]) {
A aa = new A();
aa = null;
// some code goes here
}
}
Run Code Online (Sandbox Code Playgroud)
正确答案是:"a和b引用的对象有资格进行垃圾回收." 但为什么?它们包含彼此的循环引用,它们可以相互访问.
谢谢!
它们包含彼此的循环引用,它们可以相互访问.
是的,但它们不再可以从其他任何地方访问,因此它们不再可以在程序中被看到和使用.
早期的GC在收集这些自我引用的对象组时遇到了问题,但对于现代的收集者而言,这是一个已解决的问题.
简而言之,GC可以遍历已知静态和堆栈对象的引用Web,也可以
| 归档时间: |
|
| 查看次数: |
1868 次 |
| 最近记录: |