2

.Net のガベージ コレクション プロセスで、カード テーブルの概念と書き込みバリアを説明できる人はいますか? これらの用語の説明、つまり、それらが何であるか、どのように役立つか、GC にどのように参加するかについての説明を得ることができません。どんな助けでも本当に感謝しています。

4

1 に答える 1

3

カード テーブルはビットの配列であり、旧世代では 256 バイトのメモリの各チャンクに 1 ビットが対応します。ビットは通常ゼロですが、古い世代のオブジェクトのフィールドに書き込まれると、オブジェクトのメモリ アドレスに対応するビットが 1 に設定されます。これをライトバリアの実行と呼びます。

.NET のガベージ コレクターは世代別であり、若い世代のオブジェクトのみをトレースして収集するフェーズがあります。そのため、ルートからオブジェクト グラフを通過しますが、古い世代のオブジェクトには再帰しません。このようにして、オブジェクト グラフ全体のごく一部のみをトレースします。

トレースを開始するルートを見つけるために、プログラムのローカル変数とグローバル変数をスキャンして、若い世代のオブジェクトを探します。ただし、古い世代のオブジェクトからのみ参照されるオブジェクトは見逃されます。したがって、カード テーブル ビットが設定されている古い世代のオブジェクトのフィールドもスキャンします。

その後、若い世代の収集が完了すると、カード テーブルのすべてのビットがゼロにリセットされます。

于 2016-09-10T13:41:13.517 に答える