質問

この記事こちらでは、 -XX:+ UseParNewGC "並行GCで並列若い世代のGCを有効にするために"。

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

  • -XX:+ UseParNewGC または
  • を使用
  • -XX:+ UseParNewGC -XX:+ UseConcMarkSweepGC の両方を使用しますか?

PS

JVM 6を使用しています

役に立ちましたか?

解決

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

http://java.sun.com/docs/hotspot/gc1から。 4.2 /

  

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

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

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

他のヒント

java / JDK 6 GCチューニング: http: //www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html 。これは、SUN(現在のOracle)からです。完全なもの。

また、
を参照   http://kirk.blog-city.com/is_your_concurrent_collector_failing_you.htm
http://www.javaperformancetuning.com/

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top