2009-07-22 5 views

答えて

2

GCは、ヒープがいっぱいの場合にのみ発生します。 ガベージコレクタが起動すると、 が実行され、 というヒープ内のすべてのオブジェクトがガベージであるという前提が成立します。 つまり、アプリケーションのルーツの は、 ヒープ内のオブジェクトを参照していないものとします。今度は、 ガーベッジコレクタは のルーツを歩き始め、すべての オブジェクトがルートから到達可能なグラフを作成し始めます。 の例では、 は、 をヒープ内のオブジェクトに示すグローバル変数を見つけることができます。

次の図は アプリケーション根OBJ4とOBJ5 2参照 オブジェクトObj1と、OBJ2とアプリケーション ルートに直接1参照 いくつかの割り当てられたオブジェクトとヒープを示しています。 のすべてのオブジェクトは グラフの一部になります。 アプリケーションルート1のオブジェクトObj2を追加する場合、このオブジェクトが オブジェクトObj7を参照していることを通知するコレクタ も、 グラフに追加されます。コレクタは、到達可能なすべてのオブジェクト を再帰的に移動し続けます( )。 alt text http://www.c-sharpcorner.com/UploadFile/ankithakur/GCAlgorithm12222005224854PM/Images/GC.gif

...続きここhere

他のリンクのカップルは、あなたがガベージコレクションに読んで取得する、次のとおりです。

1

GCの基本的な考え方は次のとおりです。

==========================================

すべてのアプリケーションには一連のルーツがあります。ルートは、管理対象ヒープ上のオブジェクトまたはヌルに設定されているオブジェクトを参照する格納場所を識別します。

たとえば、

- アプリケーション内のすべてのグローバルおよび静的オブジェクトポインタ。 - スレッドのスタック上のローカル変数/パラメータオブジェクトポインタ。 - 管理対象ヒープ内のオブジェクトへのポインタを含むすべてのCPUレジスタ。 - アクティブルートのリストは、ジャストインタイム(JIT)コンパイラおよび共通言語ランタイムによって維持され、ガベージコレクタのアルゴリズムにアクセス可能になり

Freachableキューからオブジェクトへのポインタ

関連する問題