ガベージコレクションの孤立の島の概念を誰か説明してもらえますか?
オブジェクトAはオブジェクトBを参照します。オブジェクトBはオブジェクトAを参照します。オブジェクトAもオブジェクトBも他のオブジェクトによって参照されていません。それは孤立した島です。
基本的に、分離のアイランドは、相互に参照するオブジェクトのグループですが、アプリケーション内のアクティブなオブジェクトによって参照されることはありません。厳密に言えば、参照されていないオブジェクトが1つでも、孤立した島です。
コメントから編集:
class A {
B myB;
}
class B {
A myA;
}
/* later */
A a = new A();
B b = new B();
a.b = b;
b.a = a;
これがこの用語の 良い説明 です。抜粋:
- 「オブジェクトobj1がガベージコレクションされているが、別のオブジェクトobj2にその参照が含まれている場合、obj2もガベージコレクションの対象になります。」
- 「オブジェクトobj2がガベージコレクションに適格なオブジェクトobj1にアクセスできる場合、obj2もガベージコレクションに適格です。」
これは「孤立の島」と呼ばれています。 「孤立の島」とは、1つ以上のオブジェクトが、アプリケーションのアクティブな部分からそれらへの参照を持たないことを意味します。
覚えておくべきことは、オブジェクトは、GCルートオブジェクト(スレッド、現在のローカル変数、静的変数など)から直接または間接的に参照されている場合にのみ収集されるということです。 2つ(またはそれ以上)のオブジェクトが相互に参照しているが、ルートから参照されていない場合、それらはガベージコレクションの対象となります。
実際、ガベージコレクションのマークアンドスイープの概念を理解していれば、孤立の島もよりよく理解できます。