この記事で-XX:+UseParNewGC
は、 「並行GCで並列の若い世代のGCを有効にする」を 使用することを提案しています。
私の混乱は、並列GCと並行GCの両方を有効にするために、
- 使用
-XX:+UseParNewGC
または -XX:+UseParNewGC
と-XX:+UseConcMarkSweepGC
?の両方を使用します
PS
JVM6を使用しています。
この記事で-XX:+UseParNewGC
は、 「並行GCで並列の若い世代のGCを有効にする」を 使用することを提案しています。
私の混乱は、並列GCと並行GCの両方を有効にするために、
-XX:+UseParNewGC
または-XX:+UseParNewGC
と -XX:+UseConcMarkSweepGC
?の両方を使用しますJVM6を使用しています。
リンクしたドキュメントは1.4.2VM用であるため、使用していると想定します(JVM 5と6の動作は異なります)。
http://java.sun.com/docs/hotspot/gc1.4.2/から
コマンドラインで-XX:+ UseConcMarkSweepGCが使用されている場合、コマンドラインで明示的に設定されていない限り、フラグUseParNewGCもtrueに設定されます。
したがって、答えは、-XX:+ UseConcMarkSweepGCを使用するだけでよく、並列の若い世代のコレクターとの並行コレクターが有効になります。
編集:Java 6の場合、同じフラグ(-XX:+ UseConcMarkSweepGC)で並行コレクターが有効になります。必要なコレクターの選択はいくつかのことに依存し、さまざまな構成をテストする必要があります。しかし、いくつかの非常に一般的なガイドラインがあります。シングルプロセッサ、シングルスレッドマシンを使用している場合は、シリアルコレクターを使用する必要があります(一部の構成ではデフォルトで、-XX:+ UseSerialGCを使用して明示的に有効にできます)。ワークロードが基本的にCPUにバインドされているマルチプロセッサマシンの場合は、パラレルコレクターを使用します。これは、-serverフラグを使用する場合はデフォルトで有効になっていますが、-XX:+UseParallelGCを使用して明示的に有効にすることもできます。GCの合計CPU時間を増やすことを犠牲にして、GCの一時停止を短くしたい場合で、複数のCPUがある場合は、並行コレクター(-XX:+ UseConcMarkSweepGC)を使用できます。
このブログ エントリには、さまざまなコレクターの詳細と有効なオプションが記載されています: http://blogs.oracle.com/jonthecollector/entry/our_collectors
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/も参照してください。
Java GC のチューニングは基本的に闇の芸術ですが、私のアプリケーション (50 GB 以上のヒープと 16 個の物理コアで実行) では、ConcMarkSweep コレクターにより、-server のデフォルトよりも 3 倍速くなり、ParallelOldGC よりも 2.2 倍速くなりました。
マシンを他のプロセスと共有していない場合 (つまり、アイドル状態のコアが浪費されるだけ)、ConcMarkSweepGC を使用します。