CMSコレクタ
CMSコレクタは(ConcurrentMarkSweep:並行マークがクリア)最短時間のためのコレクション休止は、コレクタの目標です。
このようなアプリケーションサーバの応答速度に特に重点を置いて、インターネットサイトのサーバーまたはB / Sシステムで使用するのに適しは、最短の休止時間にシステムが欲しいです。
CMSは理想的です大きなヒープメモリ、CPUコア数とより、サーバー側のアプリケーションだけでなく、コレクターG1のための最初の選択肢は、大規模なアプリケーションの前に表示されます。
並行マークスイープ並行マークをクリア、同時低ポーズコレクションは、並行処理は、ユーザスレッドで実行を指し、
オープンコレクタJVMパラメータ:-XX:+ UseConcMarkSreepGCは、このパラメータは自動的に-XX後にオンになっている:+ UseParNewGCオープン。
このパラメータを開いた後、バックアップCMSコレクタとしてのコレクタのParNew(ヤングゾーン)+ CMS(旧ゾーン)+ SerialOld組合せ、SerialOldエラーを使用。
CMSが収集するごみ(過度のメモリの断片化)することができなかった場合はSerialOld FullGcを使用することになります。
CMSは、GCの4つのステップを行いました:
- 初期マーク(CMS初期マーク):何ちょうどマーク直接GCのルーツに関連付けることができるオブジェクトはまだする必要があり、非常に速く、すべての作業スレッドを中断
- マーク(CMS同時マーク)とユーザスレッドと並行:プロセスのGCのルーツを追跡し、ユーザスレッドは、一緒に働くワーカースレッドを一時停止することなく。メインコースマークは、すべてのオブジェクトをマーク
- 再ラベル付け(CMSの発言):するには、同時マーキング修正期間を、ユーザプログラムによるラベルの変化から、オブジェクトの一部という顕著なレコードで実行し、その結果を継続し、まだすべての作業スレッドを中断する必要があります。並行マークするので、ユーザスレッドは、まだ訂正、その後、その公式のクリーンアップの前に、実行されています。
- 一緒に同時クリア(CMS同時スイープ)とユーザスレッド:クリアGCのルーツの到達不能オブジェクト、およびユーザスレッドは、一緒に働くワーカースレッドを一時停止することなく。標識化の結果に基づいて、対象物まできれいに指示します。
最長同時マークとクリアの同時処理としては、ガベージコレクションのスレッドとユーザーは、同時に一緒に働くことができるので、CMSコレクタスレッドメモリとユーザーの全体的な回復は同時に一緒です。
4枚のステップ画像のGCによるCMS
CMSの利点:低一時停止同時コレクション
CMS短所:
同時実行、CPU資源に対する圧力:により同時に、同時に収集し、アプリケーションスレッドでCMSはヒープメモリのテイクアップが増加します、と言うことです、古いガベージコレクタのヒープメモリが使い果たされる前に、CMSを完了しなければならない、またはCMS回復が失敗したとき、それはへのセキュリティメカニズム、古いシリアルコレクターの意志をトリガーする
大きな滞留時間が得られ、最後のGC STWの方法。クリアラベル付けアルゴリズムは、スペースデブリを整理することができない、の古いスペースが長いアプリケーションが徐々に枯渇し、最終的にヒープメモリに持っていたされたとして、セキュリティ・メカニズムによって圧縮されます。CMSは、フルGCの圧縮後、何回CMSコレクションの後に指定するパラメータ-XXlCMSFullGCsBeForeCompaction(毎回メモリの統合を行っているデフォルトの0を、)を提供します。
ガベージコレクタを選択する方法
- 小シングルCPUやメモリ、スタンドアロンのプログラム
-XX:+ UseSerialGC - マルチCPUは、バックグラウンドアプリケーションとして算出されるスループットを最大必要
-XXを:+ UseParallelGcまたは
-XX:+ UseParallelOlGC - 多CPU,追求低停顿时间,需快速响应如互联网应用
-XX:+UseConcMarkSweepGC
-XX:+ParNewGC
参数 | 新生代垃圾收集器 | 新生代算法 | 老年代垃圾收集器 | 老年代算法 |
---|---|---|---|---|
-XX:+UseSerialGc | SerialGc | 复制 | SerialOldGc | 标整 |
-XX:+UseParNewGc | ParNew | 复制 | SerialOldGc | 标整 |
-XX:+UseParallelGc/-XX:+UseParallelOldGc | Parallel[Scavenge] | 复制 | ParallelOld | 标整 |
-XX:+UseConcMarkSweepGc | ParNew | 复制 | CMS+SerialOld的收集器组合(SerialOld作为CMS出错的后备收集器) | 标清 |
-XX:+UseG1GC | G1整体采用标记-整理算法 | 局部是通过复制算法,不会产生内存碎片 |