stefan.at.wpf:
このようにメモリ状態を考えます:
(1) GC root -> A
(2) GC root -> B
(3) B -> GC root
ここで、「 - >」の手段は「への参照を持っています」。今1削除しからの参照を想像GC root
するA
としますB
。私は知っているA
、それはもはや到達できないように、収集化けします。
しかし、何についてB
?それはから到達可能ではないのですGC root
が、それはへの参照があるGC root
まだ生きています、。でB
、今ガベージコレクションかどうか?または他の言葉で:孤立したオブジェクトを検索するために、分析はGCルートから他のオブジェクトに、一方向に行われていますか?
ルイ:
ガベージコレクションのために使用される基本的な戦略は、ヒープ上のデータがスタックから到達可能であるかどうかを決定することです。そうでない場合は、そのメモリを解放します。
あなたはとてもとしてこれを可視化することができます
STACK *** HEAP *** HEAP *** STACK
GC root. -> A -> b -> GC root
あなたがAを削除するのであれば、あなたはまだBは、スタックに達しているが、ガベージコレクタがBに到達していないと(それが唯一のヒープにスタックから左から右/にトラバース)、それを削除しません。>ルートGC - スタックはあなたの例のBにヒープから到達可能であることは重要ではありません。ヒープデータがスタックから到達できないだけということ。