このコード例で何が起こるのだろうと思いました:
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 のインスタンスに何が起こるかをさまよいました。どちらも相互に参照されているため、収集可能とは見なされません。しかし実際には、それらは二度と参照されないため、プログラムの残りの部分に対して死んでいます。
だから私の質問は、それらはガベージコレクションされるでしょうか? それとも死んだ記憶ですか?
前もって感謝します!