36

この記事-XX:+UseParNewGCは、 「並行GCで並列の若い世代のGCを有効にする」を 使用することを提案しています。

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

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

PS

JVM6を使用しています。

4

6 に答える 6

38

リンクしたドキュメントは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)を使用できます。

于 2008-10-21T00:32:21.890 に答える
7

このブログ エントリには、さまざまなコレクターの詳細と有効なオプションが記載されています: http://blogs.oracle.com/jonthecollector/entry/our_collectors

于 2008-10-21T00:37:07.967 に答える
7

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/も参照してください。

于 2008-10-21T02:14:44.073 に答える
5

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

マシンを他のプロセスと共有していない場合 (つまり、アイドル状態のコアが浪費されるだけ)、ConcMarkSweepGC を使用します。

于 2012-09-14T06:58:55.953 に答える