誰かがG1ガベージコレクターがどのように機能するかを説明できますか?包括的でわかりやすい説明はまだどこにも見つかりませんでした。
ありがとう
コレクターはヒープを固定サイズのリージョンに分割し、それらのリージョンのライブデータを追跡します。ポインタのセット(「記憶されたセット」)を領域に出し入れします。 GCが必要であると見なされると、ライブデータが少ない領域が最初に収集されます(したがって、「ガベージファースト」)。多くの場合、これは1つのステップで領域全体を収集することを意味します。領域へのポインターの数がゼロの場合、その領域のマークまたはスイープを実行する必要はありません。
地域ごとに、それらを収集するのにかかる時間を説明するさまざまなメトリックを追跡します。一時停止時間についてのソフトなリアルタイム制約を与えることができ、その後、その制約された時間内にできるだけ多くのガベージを収集しようとします。
G1についてのJavaOneの話と、このトピックに関するいくつかの記事があります。
G1は、この新しいJavaOne 2012セッションでもうまく説明されています:G1ガベージコレクターのパフォーマンスチューニング[ youtube ]、[- [〜#〜] pdf [〜#〜] ]。
まず、CMSとG1の紹介、それらの比較、そしてG1の分析とチューニングについて説明します。
G1の特徴
典型的なG1ヒープは次のようになります。
各G1期の要約は次のとおりです。
1.1ヤングフェーズ-マイナーGC
1.2ヤング/イニシャルマーク
2.1初期マーク-1.2を参照してください。
2.2GCリマーク
2.3。 GC一時停止(混合)
G1は、フルGCを可能な限り回避することを目的としていることに注意してください。 Java 7u40の時点で、G1のFullGC一時停止は最適化されておらず、シングルスレッド操作として実装されています。G1を使用する場合は、フルGCを回避してください。FullGC一時停止が表示された場合は、GCセットアップおそらくいくつかの調整が必要です。
Oracleのページ は、長すぎずにアクセス可能な方法で概念を説明するのに非常に役立つことがわかりました。