class Beta { }
class Alpha {
static Beta b1 ;
Beta b2;
}
public class Tester {
public static void main(String[] args) {
Beta b1 = new Beta();
Beta b2 = new Beta();
Alpha a1 = new Alpha();
Alpha a2 = new Alpha();
a1.b1 = b1 ;
a1.b2 = b1 ;
a2.b2 = b2 ;
a1 = null ;
b1 = null;
b2 = null;
System.out.println(" Line 1 " + " a1 " + a1.b1);
System.out.println(" Line 2 " + " a1 " + a1.b2);
System.out.println(" Line 3 " + " a2 " + a2.b2);
System.out.println(" Line 4 " + " a1 " + a2.b1);
System.out.println(" Line 5 " + " b1 " + b1);
System.out.println(" Line 6 " + " b1 " + b2);
}
}
上記のプログラムでガベージ コレクションに a1 オブジェクトしか使用できない理由がわかりません。a1 、 b1 、および b2 がガベージコレクターによって収集されることを期待しています。
ご覧のとおり、 a1 、 b1 、および b2 は NULL になっているため、オブジェクトをガベージ コレクションで使用できるようになっています。オブジェクトが NULL であるか、どのスレッドまたは参照変数からも到達できない場合、ガベージ コレクターによって収集する必要があります。
誰かが上記のプログラムの微妙さを良い例でより正確に理解するのを手伝ってくれますか? あなたの助けに感謝します。