web-dev-qa-db-ja.com

Java同時並行GC

この記事 here-XX:+UseParNewGC「並行GCで並列若い世代GCを有効にするため」。

私の混乱は、並列GCと同時GCの両方を有効にするために、

  • 使用する -XX:+UseParNewGCまたは
  • 両方を使う -XX:+UseParNewGCand-XX:+UseConcMarkSweepGC

PS

JVM 6を使用しています。

36
pdeva

あなたがリンクしたドキュメントは1.4.2 VMのためのものだったので、私はあなたが使用していると仮定します(JVM 5と6は異なる動作をします)。

から http://Java.Sun.com/docs/hotspot/gc1.4.2/

-XX:+ UseConcMarkSweepGCがコマンドラインで使用されている場合、フラグUseParNewGCも、コマンドラインで明示的に設定されていない場合はtrueに設定されます。

したがって、答えは-XX:+ UseConcMarkSweepGCを使用するだけでよく、並行コレクターと並列の若い世代のコレクターを有効にします。

編集:for Java 6、同じフラグ(-XX:+ UseConcMarkSweepGC)は並行コレクターを有効にします。必要なコレクターの選択はいくつかの事項に依存するため、異なる構成をテストする必要があります。シングルプロセッサ、シングルスレッドマシンを使用している場合は、シリアルコレクターを使用する必要があります(一部の構成のデフォルトは、-XX:+ UseSerialGCで明示的に有効にできます)。基本的にCPUバウンド、パラレルコレクターを使用します。これは、-serverフラグを使用する場合はデフォルトで有効になりますが、-XX:+ UseParallelGCを使用して明示的に有効にすることもできます。 GCの合計CPU時間を増やし、複数のCPUがある場合、コンカレントコレクターを使用できます(-XX:+ UseConcMarkSweepGC)。コンカレントコレクターは、より多くのRAM特定のワークロードのシリアルまたはパラレルコレクターよりもJVMメモリの断片化が発生する可能性があります。

38
sk.
7
anjanb

このブログエントリには、さまざまなコレクターの詳細な内訳と、有効なオプションがあります。 http://blogs.Oracle.com/jonthecollector/entry/our_collectors

7
tpoindex

Java GCのチューニングは基本的には暗い芸術ですが、私のアプリケーション(50 + GBのヒープと16の物理コアで実行)では、ConcMarkSweepコレクターは-serverのデフォルトを3倍、ParallelOldGCを2.2倍高速化しました。

マシンを他のプロセスと共有していない(つまり、アイドルコアが無駄になっている)場合は、ConcMarkSweepGCを使用します。

5
Charles Munger

ParNewは、CMSを使用する場合のデフォルトの若い世代のコレクタです。CMSを使用するには、-XX:+ UseConcMarkSweepGCを指定するだけで、ParNewがデフォルトで使用されます。 CMSは、GCジッターの回避が優先される場合に優れたコレクターですが、ジョブのようなバッチでスループットがより重要な場合、デフォルトのSunパラレルコレクターがより良いジョブを行います。

2
Deven

2つのGCオプションを同時に有効にすることはできません。 UseParNewGCと比較して次世代GCよりも優れたCMSを使用することをお勧めします。 Java 1.7以降およびヒープサイズが比較的大きい(4GB以上など)を使用する場合は、G1の使用を検討してください。