これらは、若い世代のガベージコレクションのアルゴリズムです。
2つ目(UseParNewGC)は、同時期の世代別ガベージコレクションで自動的にアクティブになります( Java Concurrent and Parallel GC を参照)が、2つの並列アルゴリズムに違いはありますか?
多くの検索の後、私が見つけた最良の説明は、Java Performance Tuning Webサイトの 今月の質問:1.4.1ガベージコレクションアルゴリズム、2003年1月29日
若い世代のガベージコレクションアルゴリズム
(元の)コピーコレクター(デフォルトで有効)。このコレクターが起動すると、すべてのアプリケーションスレッドが停止し、1つのスレッドを使用してコレクションのコピーが進行します(マルチCPUマシン上であっても1つのCPUのみを意味します)。基本的に、JVMはコレクションが完了するまで他のすべてを一時停止するため、これは世界停止コレクションとして知られています。
パラレルコピーコレクター(-XX:+ UseParNewGCを使用して有効化)。元のコピーコレクターと同様に、これは世界のコレクターです。ただし、このコレクターは、複数のスレッドでコピーコレクションを並列化します。これは、マルチCPUマシンの元のシングルスレッドコピーコレクター(シングルCPUマシンではない)よりも効率的です。このアルゴリズムは、元のシングルスレッドコピーコレクターと比較した場合、使用可能なCPUの数に等しい係数で、若い世代のコレクションを潜在的に高速化します。
パラレルスカベンジコレクター(-XX:UseParallelGCを使用して有効化)。これは以前の並列コピーコレクターに似ていますが、アルゴリズムはマルチCPUマシンのギガバイトヒープ(10GB以上)に合わせて調整されています。この収集アルゴリズムは、一時停止を最小限に抑えながらスループットを最大化するように設計されています。ヒープスペースのサイズを自動的に変更するオプションの適応チューニングポリシーがあります。このコレクターを使用する場合、古い世代の元のマークスイープコレクターのみを使用できます(つまり、新しい古い世代の同時コレクターはこの若い世代のコレクターで動作できません)。
この情報から、主な違いは(CMSの協力とは別に)UseParallelGCは ergonomics をサポートするが、UseParNewGCはサポートしないことです。
seParNewGC若い世代のコピーコレクターの並行バージョンがコンカレントコレクターで使用されます(つまり、コマンドラインで-XX:+ UseConcMarkSweepGCが使用される場合、UseParNewGCフラグもtrueに設定されます)それ以外の場合は、コマンドラインで明示的に設定します)。
おそらく最も簡単な理解方法は、 Alexey Ragozin によって作成されたガベージコレクションアルゴリズムの組み合わせでした。
<table border="1" style="width:100%">
<tr>
<td align="center">Young collector</td>
<td align="center">Old collector</td>
<td align="center">JVM option</td>
</tr>
<tr>
<td>Serial (DefNew)</td>
<td>Serial Mark-Sweep-Compact</td>
<td>-XX:+UseSerialGC</td>
</tr>
<tr>
<td>Parallel scavenge (PSYoungGen)</td>
<td>Serial Mark-Sweep-Compact (PSOldGen)</td>
<td>-XX:+UseParallelGC</td>
</tr>
<tr>
<td>Parallel scavenge (PSYoungGen)</td>
<td>Parallel Mark-Sweep-Compact (ParOldGen)</td>
<td>-XX:+UseParallelOldGC</td>
</tr>
<tr>
<td>Serial (DefNew)</td>
<td>Concurrent Mark Sweep</td>
<td>
<p>-XX:+UseConcMarkSweepGC</p>
<p>-XX:-UseParNewGC</p>
</td>
</tr>
<tr>
<td>Parallel (ParNew)</td>
<td>Concurrent Mark Sweep</td>
<td>
<p>-XX:+UseConcMarkSweepGC</p>
<p>-XX:+UseParNewGC</p>
</td>
</tr>
<tr>
<td colspan="2">G1</td>
<td>-XX:+UseG1GC</td>
</tr>
</table>
結論:
通常「Parallel Young Generation Collector」として知られるUseParNewGCは、より洗練された効率的な点を除き、すべての点でパラレルガベージコレクター(-XX:+ UseParallelGC)と同じです。また、「同時ローポーズコレクター」と併用することもできます。
Java GC FAQ 、質問22を参照してください。
UseParNewGCにはいくつかの既知のバグがあることに注意してください
-XX:+ UseParNewGCを-XX:+ UseConcMarkSweepGCとともに使用すると、-XX:+ UseParallelGCと比較すると、マイナーGCの休止時間が長くなります。
これは、若い世代から古い世代へのオブジェクトの昇格には、このオブジェクトのアドレスを見つけるために(旧世代のフラグメンテーションのため)ベストフィットアルゴリズムを実行する必要があるためです。
[。