コレクタ・コンカレント・マーク・スイープ・コレクタの拡張機能

説明

コンカレント・コレクタやCMSとも呼ばれる、コンカレント・マーク・スイープ・コレクタは、ガベージ・コレクション一時停止の影響を受けるアプリケーションをターゲットにしています。このコレクタは、ほとんどのガベージ・コレクション・アクティビティを同時に実行します。つまり、アプリケーション・スレッドが実行されている間、ガベージ・コレクションによる一時停止を短く保ちます。JDK 6のCMSコレクタに行われた主なパフォーマンス拡張については、次で説明します。これらの変更、CMSコレクタ、およびHotSpotのガベージ・コレクションの詳細は、以下で参照されるドキュメントを参照してください。

これらの機能は、CMSコレクタが使用されているときのみ適用されます。オプション-XX:+UseConcMarkSweepGCがCMSコレクタを選択します。

System.gc()の同時実行

System.gc()およびRuntime.getRuntime().gc()メソッドは、未使用のオブジェクトをリサイクルするためにガベージ・コレクタを実行するようにJVMに指示します。これらのメソッドのHotSpot実装は一般的に、ヒープ全体を収集するためにすべてのアプリケーション・スレッドを停止します。このため一時停止が長くなります(特にヒープが大きい場合)これは、一時停止を短く保つというCMSコレクタの目標に反します。

JDK 6では、CMSコレクタは、System.gc()またはRuntime.getRuntime().gc()呼出しに反応して一時停止が長くなることを避けるために、オプションでこれらのコレクションを同時に実行できます。この機能を有効にするには、次のオプションを

-XX:+ExplicitGCInvokesConcurrent

javaコマンド行に追加します。

デフォルトの若い世代のサイズの増加

CMSコレクタが使用されるときに若い世代のデフォルト・サイズを大きくするために、いくつかの変更が行われました。

これらの変更によって主な影響は、ガベージ・コレクション・オーバーヘッドが減少することで、アプリケーション・パフォーマンスが向上しました。ただし、若い世代のデフォルト・サイズが増加したため、アプリケーションでは若い世代の一時停止時間が増加し、メモリー・フットプリントが増加する可能性があります。世代、Survivor領域、およびサイズを調整するために使用可能なオプションについては、必要に応じて以下で参照されるドキュメントを参照してください。

パラレル・マーキング

CMSコレクタが、複数のスレッドを使用して、複数のプロセッサを持つプラットフォームでパラレルにパラレル・マーキング・タスクを実行するようになりました。これにより、パラレル・マーキング・サイクルの時間が短縮され、コレクタはより多くのスレッドおよびより高いオブジェクト割当て率を持つアプリケーションをサポートできます(特に大きなマルチプロセッサ・マシン上で)。以前のリリースでは、パラレル・マーキング用に1つのスレッドだけを使用していたため、非常に高いオブジェクト割当て率を持つアプリケーションに対応するコレクタの能力が制限されていました。

詳細情報

HotSpot メモリー管理ホワイト・ペーパーでは、CMSコレクタおよびHotSpotで使用可能なその他のコレクタと、世代、Survivor領域、およびその他のメモリー管理概念について説明しています。

HotSpot ドキュメント・ページには、各リリースに固有のガベージ・コレクション・チューニング・ガイドへのリンクが含まれています。アプリケーションに最適なガベージ・コレクタを選択するためのガイドラインと、ガベージ・コレクション・オーバーヘッドを減らすのに役立つテクニックが示されています。


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