プライマリ・コンテンツに移動
Java Platform, Standard Edition HotSpot仮想マシン・ガベージ・コレクション・チューニング・ガイド
リリース10
E94983-01
目次へ移動
目次

前
前へ
次

5 使用可能なコレクタ

ここまでは、シリアル・コレクタについて説明してきました。Java HotSpot VMには3つの異なるタイプのコレクタがあり、それぞれパフォーマンス特性が異なります。

シリアル・コレクタ

シリアル・コレクタでは単一のスレッドを使用してすべてのガベージ・コレクション作業を実行するので、スレッド間通信のオーバーヘッドが発生しないため、比較的効率的です。

これはマルチプロセッサ・ハードウェアを活用できないので、シングル・プロセッサ・マシンに最適ですが、小規模なデータ・セット(最大で約100MB)を保持するアプリケーションに対しては、マルチプロセッサ上でも使用できる場合があります。シリアル・コレクタは、特定のハードウェアおよびオペレーティング・システム構成でデフォルト選択されていることもあれば、オプション-XX:+UseSerialGCで明示的に有効にすることもできます。

パラレル・コレクタ

パラレル・コレクタはスループット・コレクタとも呼ばれ、シリアル・コレクタと同様に世代別コレクタです。シリアル・コレクタとパラレル・コレクタとの主な違いは、パラレル・コレクタには複数のスレッドがあり、これを使用してガベージ・コレクションを高速化する点です。

パラレル・コレクタは、マルチプロセッサまたはマルチスレッド・ハードウェアで実行される、中規模から大規模サイズのデータ・セットを保持するアプリケーション向けです。これを有効にするには、-XX:+UseParallelGCオプションを使用します。

パラレル圧縮は、パラレル・コレクタがメジャー・コレクションを並列実行できるようにする機能です。パラレル圧縮が使用できないと、メジャー・コレクションは単一のスレッドを使用して実行されるので、可用性が大きく制限されます。オプション-XX:+UseParallelGCが指定されている場合、パラレル圧縮はデフォルトで有効です。これを無効にするには、-XX:-UseParallelOldGCオプションを使用します。

モーストリ・コンカレント・コレクタ

コンカレント・マーク・スイープ(CMS)コレクタおよびガベージファースト(G1)ガベージ・コレクタは、両方ともモーストリ・コンカレント・コレクタです。モーストリ・コンカレント・コレクタは、負荷が高い作業をアプリケーションと同時に実行します。

  • G1ガベージ・コレクタ: このサーバー型のコレクタは、大規模なメモリーを保持するマルチプロセッサ・マシンを対象としています。ガベージ・コレクション一時停止時間目標を高い確率で満たしながら、高いスループットを実現します。

    G1は、特定のハードウェアおよびオペレーティング・システム構成でデフォルト選択されていることもあれば、-XX:+UseG1GCを使用して明示的に有効にすることもできます。

  • CMSコレクタ: このコレクタは、ガベージ・コレクションによる一時停止の短縮が優先され、ガベージ・コレクションとプロセッサ・リソースを共有する余裕があるアプリケーションを対象としています。

    CMSコレクタを有効にするには、オプション-XX:+UseConcMarkSweepGCを使用します

CMSコレクタは、JDK 9以降非推奨になりました。

コレクタの選択

それほど厳しい一時停止時間の要件がアプリケーションになければ、まずアプリケーションを実行して、VMにコレクタを選択させます。

必要な場合は、ヒープ・サイズを調整してパフォーマンスを改善します。パフォーマンスがまだ目標を満たさない場合は、次のガイドラインをコレクタ選択の基準として使用してください。

  • アプリケーションが小規模のデータ・セット(最大約100MB)を保持する場合、オプション-XX:+UseSerialGCを指定してシリアル・コレクタを選択します。

  • アプリケーションをシングル・プロセッサ上で実行し一時停止時間の要件がない場合は、オプション-XX:+UseSerialGCを指定してシリアル・コレクタを選択します。

  • (a) ピーク時のアプリケーションのパフォーマンスを最優先し、(b) 一時停止時間の要件がないか、1秒以上の停止時間が許容される場合は、VMにコレクタを選択させるか、-XX:+UseParallelGCを指定してパラレル・コレクタを選択します。

  • レスポンス時間を全体のスループットよりも重視し、ガベージ・コレクションの一時停止を約1秒未満に短く保つ必要がある場合は、-XX:+UseG1GCまたは-XX:+UseConcMarkSweepGCを指定してコンカレント・コレクタを選択します。

ヒープ・サイズ、アプリケーションが保持するライブ・データの容量、および使用可能なプロセッサの数と速度にパフォーマンスは依存するため、これらのガイドラインはコレクタを選択するための基準を示しているにすぎません。一時停止時間は特にこれらの要因の影響を受けるため、前に説明した1秒のしきい値は概算値にすぎません。パラレル・コレクタでは、ヒープ・サイズとハードウェアの多くの組合せで一時停止時間が1秒を超えることがあります。逆に、コンカレント・コレクタでは、一部の組合せにおいて、一時停止を1秒未満に保てない場合があります。

推奨されるコレクタで必要なパフォーマンスを達成できない場合は、まずヒープ・サイズと世代サイズを調整して、必要な目標を満たすようにしてください。それでもパフォーマンスが不十分な場合は、別のコレクタを試してみます。一時停止時間を短縮するにはコンカレント・コレクタを、マルチプロセッサ・ハードウェア上で全体のスループットを上げるにはパラレル・コレクタを使用します。