トーク.NETアプリケーションのルートオブジェクトのライフサイクルとは何ですか

 

簡単に言えば、ルートは、ヒープ上のオブジェクトポイントへの参照基準です。厳密に言えば、ルートは次のような状況を持つことができます。

   (1)(C#でサポートされていないが、しかし、CILコードはグローバルオブジェクトに割り当て可能)グローバルオブジェクトを参照します

  (2) 任意の静的オブジェクトをポイント

  (3) コードへの局所適用の対象点

  (4) の関数に渡されたポインティングオブジェクトパラメータ

  (5) ポインティングが終了するのを待っている(の確定)オブジェクト

  (6) 任意のオブジェクトは、CPUレジスタを指摘しました

ガベージコレクションの過程では、オブジェクトの上にマネージヒープのランタイムチェックは、まだアプリケーションのルートから到達可能です。アップチェックするために、CLRは、各ヒープオブジェクト図の代表に構築されます。オブジェクト図は、すべての到達可能なオブジェクトを記録するために使用されています。同時に、このように迷惑な循環参照を避けて、地図上の二回オブジェクトをマークしませんガベージコレクタに注意を払います。

  Aという名前の管理ヒープ、オブジェクトBが存在すると仮定し、C、D、E、FおよびGが設定されています。ガベージコレクションプロセスでは、我々は、ルート到達可能かどうか(両方の内部オブジェクトを含むこれらのオブジェクトは、参照が含まれている場合があります)、これらのオブジェクトを検討します。マップが作成されると、到達不能オブジェクトは(この場合、オブジェクトCとF)スパムとしてマークされています。

  図は、可能な被写界を示す図である(矢印もし依存性または所望のように読むことができ、例えば、Aは、任意のオブジェクト「などに依存しない「Eは、Bに間接的に依存して、Gに依存します」)。

 

 

(作成されたオブジェクトグラフが到達可能なアプリケーションのルートであるオブジェクトを決定するために使用されます。)

  オブジェクトは(この場合は、彼らはF-- Cではなく、図面では)最後としてマークされたら、それはメモリ内でクリアされました。この場合、残りのメモリヒープスペースは、アプリケーションがアクティブCLRルートセット(および対応するポインタ)を変更させた、圧縮されたポイントへの正しいメモリ位置に(これは自動的に透明に行われます)。最後に、次の利用可能なメモリ位置の次のオブジェクトへのポインタを調整します。

  次の図は、クリアのプロセスを示し、ヒープを圧縮します。

 

 

ここでは、役割のアプリケーションルートの理解を通じて、我々は、オブジェクトが「不要」されて知らない方法を知っています。それは、アプリケーションを必要としているオブジェクトがアクセスされていないことを人気のポイントで、「島」になった、自然に、不要になりました。

 

抜粋します。https://www.cnblogs.com/MaMaNongNong/p/11945161.html

タイトル:話.NETオブジェクトのライフサイクル

 

世代は、オブジェクトを理解する - 最適化ガベージコレクションプロセスに

  オブジェクトが到達不能な検索しようとすると、各オブジェクトは、CLRがヒープを管理チェックされません。明らかに、これは特に大きな(例えば現実)プログラムの中で、多くの時間を消費します。

  このプロセスの最適化に役立つ、ヒープ上の各オブジェクトは、特別に割り当てられている「世代。」アイデアの背後にある概念に代わって簡単です:長い古いオブジェクトの有効期間は、新しいオブジェクトの比較的短い寿命というヒープ長い生存期間のオブジェクトは、より可能性の高い次のそれは、存在し続け例えば、オブジェクト実装メイン()は、プログラムが終了するまで記憶していました。これとは対照的に、ごく最近のヒープ内のオブジェクトを置く(例えば、目標範囲内の関数に割り当てられた)可能性がすぐに到達できないのです。

  各オブジェクトは、次のいずれかの代わりに、ヒープに属しています:

    ジェネレーション0:最近割り当てられたオブジェクトが回復としてマークされていない特定

  ジェネレーション1:経験豊富なオブジェクトとガベージコレクションは、(例えば、彼はリサイクルとしてマークされますが、理由はヒープ領域の十分の除去されずに)生き延び識別

  ジェネレーション2:オブジェクトはラウンドガベージコレクションよりも多くの経験としている識別が生き残ります。

 

  ガベージコレクタは、最初に確認世代0のすべてのオブジェクト。ラベルの場合、これらのオブジェクト(翻訳者注:新しいオブジェクトの寿命がしばしば短く、実装の回復を期待しているため、アプリケーションはもはやマネージヒープ上の最初の0多くのオブジェクトを使用しています)をクリーンアップするのに十分なメモリ使用量を生成した後スペースは、任意の生き残りターゲットは1世代に上げました。オブジェクトの生成は、回復プロセスをどのように影響するかを理解するには、以下の見ることができます。回収された、ライブオブジェクトが持ち上げられたら、次の図は、世代0ごみのプロセスを示します。  

 

おすすめ

転載: www.cnblogs.com/Tpf386/p/12009311.html