どのようにガベージコレクションは孤立したオブジェクトを識別するのでしょうか?

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にヒープから到達可能であることは重要ではありません。ヒープデータがスタックから到達できないだけということ。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=370903&siteId=1
おすすめ