Java Platform, Standard Edition HotSpot仮想マシン・ガベージ・コレクション・チューニング・ガイド
目次      

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

JDK 8では、Java Hotspot VMに2つのモーストリ・コンカレント・コレクタが用意されています。

並行処理のオーバーヘッド

モーストリ・コンカレント・コレクタは、(本来ならばアプリケーションで使用できるはずの)プロセッサ・リソースとメジャー・コレクションの一時停止時間の短縮をトレードオフします。 わかりやすいオーバーヘッドとしては、コレクションの並行処理部分で1つ以上のプロセッサが使用される点があげられます。 N個のプロセッサを搭載したシステムでは、コレクションの並行処理部分で、使用可能なプロセッサのK/N (1<=K<=ceiling{N/4})を使用します。 (Kの正確な値と範囲は変更されることがあります。) 並行処理を有効にすると、コンカレント・フェーズ中のプロセッサの使用以外にもオーバーヘッドが発生します。 したがって、コンカレント・コレクタでは通常、ガベージ・コレクションによる一時停止が大幅に短くなる一方で、アプリケーションのスループットは他のコレクタと比べると若干低下する傾向があります。

複数の処理コアを搭載したマシンでは、コレクションの並行処理中にアプリケーション・スレッドがプロセッサを使用できるので、コンカレント・ガベージ・コレクタ・スレッドによってアプリケーションが一時停止されることはありません。 これにより通常は一時停止が短くなりますが、この場合もアプリケーションで使用できるプロセッサ・リソースが少なくなるので、特にアプリケーションがすべての処理コアを最大限に使用する場合は処理速度の低下が予想されます。 Nが増えると、コンカレント・ガベージ・コレクションに伴うプロセッサ・リソースの減少が小さくなり、コンカレント・コレクションのメリットが増大します。 このようなスケーリングに想定される制約については、「コンカレント・マーク・スイープ(CMS)コレクタ」「並行モードの失敗」で説明しています。

コンカレント・フェーズ中はガベージ・コレクションで1つ以上のプロセッサが使用されるため、一般に単一プロセッサ(シングル・コア)マシンではコンカレント・コレクタによるメリットはありません。 ただし、CMS (G1ではない)には、プロセッサが1、2個しか搭載されていないシステム上で短い一時停止を実現できる別のモードが用意されています。詳細は、「コンカレント・マーク・スイープ・コレクタ(CMS)」「インクリメンタル・モード」を参照してください。 この機能はJava SE 8で非推奨となり、今後のメジャー・リリースでは削除される可能性があります。

その他の参照

ガベージファースト・ガベージ・コレクタ:

http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html

ガベージファースト・ガベージ・コレクタのチューニング:

http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html

目次      

Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved.