我想將這個示例代碼發生什麼:Java垃圾收集允許死鎖?
public class Start {
public static void main(String[] args) {
new Start().go();
}
public Start() {
A a = new A();
B b = new B();
a.setB(b);
b.setA(a);
}
public boolean running = true;
public void go() {
while(running) {
try {
Thread.sleep(10);
} catch (Throwable t) {}
}
}
}
public class A {
B b;
public void setB(B b) {
this.b = b;
}
}
public class B {
A a;
public void setA(A a) {
this.a = a;
}
}
這顯然是一個愚蠢的計劃,但: 我逛到會發生什麼,A和B的實例? 它們都是相互引用的,所以它們不應該被認爲是可收集的。但事實上,它們對程序的其餘部分是死的,因爲它們將永遠不會再被引用。
所以我的問題是他們會被垃圾收集?或者他們是死記硬背?
在此先感謝!
當'Start'構造完成兩個'了'和'B'掉出的範圍。 – Bart