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

モーストリ・コンカレント・コレクタは、一部の作業をアプリケーションと同時に実行するため、このように呼ばれています。Java HotSpot VMには、2つのモーストリ・コンカレント・コレクタが含まれています。

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

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

モーストリ・コンカレント・コレクタのオーバーヘッド

モーストリ・コンカレント・コレクタは、(本来ならばアプリケーションで使用できるはずの)プロセッサ・リソースとメジャー・コレクションの一時停止時間の短縮をトレードオフします。

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

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

コンカレント・フェーズ中はガベージ・コレクションで1つ以上のプロセッサが使用されるため、一般に単一プロセッサ(シングル・コア)マシンではコンカレント・コレクタによるメリットはありません。