並列圧縮は、マルチプロセッサ (またはマルチスレッド) ハードウェアを利用するために並列にフル GC を実行することで既存の並列コレクタを補完します。名前が示すとおり、2 つ以上の CPU または 2 つ以上のハードウェアスレッドを持つプラットフォームに適しています。この機能は JDK 5.0 update 6 で最初に使用可能になり、JDK 6 の実装ではパフォーマンスが大幅に向上しています。
並列圧縮が使用可能になる以前は、並列コレクタは並列に若い世代コレクション (Young GC) を実行していましたが、フル GC はシングルスレッドで実行されていました。Young GC 時には若い世代のみが収集され、フル GC 時にはヒープ全体が収集されます。世代およびガベージコレクションについては、次のドキュメントを参照してください。並列圧縮はフル GC を並列に実行します。これにより、ガベージコレクションによるオーバーヘッドが減少し、特にマルチプロセッサハードウェア上で実行されている大きなヒープを持つアプリケーションで、アプリケーションのパフォーマンスが向上します。
並列圧縮はデフォルトで有効になっていません。
-XX:+UseParallelOldGC
並列圧縮を有効にするには、このオプションを java
コマンド行に追加します。今後のリリースでは、並列圧縮はマルチプロセッサハードウェア上でデフォルトで有効になる予定です。
並列圧縮は並行 Mark Sweep コレクタとともに使用することはできません。並列若い世代コレクタとともにのみ使用できます。使用可能なコレクタおよび推奨の使用方法については、次のドキュメントを参照してください。
ホットスポットのメモリー管理ホワイトペーパーでは、ホットスポットで使用可能なさまざまなコレクタについて説明されており、並列圧縮を使用するタイミングに関する推奨事項およびアルゴリズムに関する高レベルな説明が含まれています。
ホットスポットのドキュメントページには、各リリースに固有のガベージコレクションの調整を行うためのガイドへのリンクが含まれています。このガイドには、要件に最適なガベージコレクタを選択するためのガイドライン、およびガベージコレクションによるオーバーヘッドを減らす場合に役立つ技術が示されています。