2016-09-03 13 views
2

誰でもカードテーブルの概念を説明し、.Netのガベージコレクションプロセスにおける障壁を書き込むことができますか? 私は本当にこれらの用語の説明を得ることができません。つまり、どのようなもので、どのように役立ち、どのようにGCに参加するのですか? 本当にありがとうございます。.netでのカードテーブルと書き込み障壁GC

+0

ウィルソンのカードマーキング用紙を読んだことがありますか? doi 10.1145/66068.66077 – the8472

+0

いいえ、その記事にすべての回答が含まれている場合は、リンクを共有することができれば本当に感謝しています。 – maverickabhi

+0

この記事が参考になった:https://msdn.microsoft.com/en-us/library/ms973837.aspx – FuleSnabel

答えて

1

カードテーブルは、古い世代の256バイトのメモリのチャンクごとに1ビットのビットの配列です。ビットは通常0であるが、古い世代のオブジェクトのフィールドが書き込まれるとき、オブジェクトメモリアドレスに対応するビットは1にセットされる。これは書き込みバリアの実行と呼ばれます。

.NETのガベージコレクタは世代別世代であり、若い世代のオブジェクトのみをトレースして収集するフェーズがあります。したがって、それはルーツから始まるオブジェクトグラフを通過しますが、古い世代のオブジェクトには再帰しません。この方法では、オブジェクトグラフ全体のわずかな部分しかトレースしません。

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

若い世代のコレクションが完了した後、すべてのカードテーブルビットをゼロにリセットします。

関連する問題