web-dev-qa-db-ja.com

ガベージファーストガベージコレクターはどのように機能しますか?

誰かがG1ガベージコレクターがどのように機能するかを説明できますか?包括的でわかりやすい説明はまだどこにも見つかりませんでした。

ありがとう

43
dogbane

コレクターはヒープを固定サイズのリージョンに分割し、それらのリージョンのライブデータを追跡します。ポインタのセット(「記憶されたセット」)を領域に出し入れします。 GCが必要であると見なされると、ライブデータが少ない領域が最初に収集されます(したがって、「ガベージファースト」)。多くの場合、これは1つのステップで領域全体を収集することを意味します。領域へのポインターの数がゼロの場合、その領域のマークまたはスイープを実行する必要はありません。

地域ごとに、それらを収集するのにかかる時間を説明するさまざまなメトリックを追跡します。一時停止時間についてのソフトなリアルタイム制約を与えることができ、その後、その制約された時間内にできるだけ多くのガベージを収集しようとします。

G1についてのJavaOneの話と、このトピックに関するいくつかの記事があります。

43
Eugene Kuleshov

G1は、この新しいJavaOne 2012セッションでもうまく説明されています:G1ガベージコレクターのパフォーマンスチューニング[ youtube ]、[- [〜#〜] pdf [〜#〜] ]。

まず、CMSとG1の紹介、それらの比較、そしてG1の分析とチューニングについて説明します。

G1の特徴

  • 固定サイズのリージョン-ヒープをリージョンに分割(1Mb-32MB、〜2000、VMによって決定)。
  • Eden、survivor、OldGenは、論理的な領域のセットとして表されます。
  • ライブオブジェクトは、ある地域から別の地域に避難されます

典型的なG1ヒープは次のようになります。

A typical G1 heap may look like:

各G1期の要約は次のとおりです。

1.ヤングコレクション

1.1ヤングフェーズ-マイナーGC

  • Evacuation-Stop-The-World ParallelマイナーGC。ライブオブジェクトがYoung GenerationからSurvivorリージョン(tenuring)またはOldGenリージョン(プロモーション)に避難します。
  • アカウンティング-次の若いGCのエデン/サバイバースペースのサイズは、各地域の統計と、によって設定された一時停止時間の目標に基づいて決定されます。アプリ。 G1は、次のYoungGCに必要な時間を見積もります。
  • サイズ変更-G1は、エデン/サバイバー領域を簡単に縮小/サイズ変更できるようになりました。

1.2ヤング/イニシャルマーク

  • GC young initial-markは、YoungGCコレクションと並行して実行されるOldGenコレクションの初期マーキングフェーズです。初期マークは、並行する同時マーキングプロセスです。

2.旧世代コレクション

2.1初期マーク-1.2を参照してください。

2.2GCリマーク

  • ワンストップザワールドポーズ、同時マーキングライブオブジェクト
  • アカウンティング-各リージョンについて、発言中、G1はリージョンの生存率liviness(各リージョンに存在するオブジェクトの数)、およびリージョンへの参照を追跡しています(Remembered Set)-これは、この領域でコレクションを実行するのにかかる時間をG1に通知します。
  • 空の地域が開拓された

2.3。 GC一時停止(混合)

  • livinessの低い地域を選択し、それらのいくつかを収集します。そのため、「ガベージファースト」を集めています。
  • これらの領域の実際の収集は、次のYoung GCと同時に実行されるため、OldGenの収集には個別の一時停止はありません。したがって、GCポーズ(混合)は、YoungGenと古いGenの一部の混合コレクションです。
  • GC一時停止(混合)の終了時に、古いgen領域にガベージが残っている可能性があります。これは、将来の生存率、一時停止時間の目標、および未使用領域の数に応じて、後で収集されます。

3.フルGC

G1は、フルGCを可能な限り回避することを目的としていることに注意してください。 Java 7u40の時点で、G1のFullGC一時停止は最適化されておらず、シングルスレッド操作として実装されています。G1を使用する場合は、フルGCを回避してください。FullGC一時停止が表示された場合は、GCセットアップおそらくいくつかの調整が必要です。

リソース

33
Aleš

Oracleのページ は、長すぎずにアクセス可能な方法で概念を説明するのに非常に役立つことがわかりました。

1
Sina Madani