Hitachi

Cosminexus V11 アプリケーションサーバ システム設計ガイド


7.15.9 Concurrent Marking(CM)

図7‒29 Concurrent Markingの流れ

[図データ]

〈この項の構成〉

(1) 実行契機

CMは大きく次の5つの処理から構成されます。それぞれの実行契機について示します。なお,1.〜5.の表記は上図の1.〜5.に対応しています。

  1. Concurrent Root Region Scan:

    YoungGC(initial-mark)終了後,実行されます。

  2. Concurrent Mark:

    1.の終了後,1.に続けて実行されます。

  3. Remark:

    2.の終了後,アプリケーションを停止できるタイミングで実行されます。

  4. Cleanup:

    3.の終了後,アプリケーションを停止できるタイミングで実行されます。

  5. Concurrent Cleanup:

    4.の終了後,4.に続けて実行されます。

(2) 対象範囲

New領域,Tenured領域およびHumongous領域

(3) 処理内容

CMは大きく次の5つの処理から構成されます。それぞれの処理の詳細を示します。

  1. Concurrent Root Region Scan:

    ローカル変数や使用中のオブジェクトから直接参照されているSurvivor領域内のオブジェクトにマークを付ける処理です。マルチスレッドで実行されます。

  2. Concurrent Mark:

    YoungGC(initial-mark)のマーキングと1.のマーキングでマークを付けたオブジェクトが参照しているオブジェクトにマークを付ける処理です。マルチスレッドで実行されます。

  3. Remark:

    2.のマーキング中に参照関係が変化したオブジェクトのマークを付け直す処理です。マルチスレッドで実行されます。

  4. Cleanup:

    リージョンごとに使用中オブジェクトの合計サイズを求める処理です。また,次のCMに備え,マークの初期化もします。マルチスレッドで実行されます。

  5. Concurrent Cleanup:

    使用中のオブジェクトが1つも存在しないリージョンを回収する処理です。シングルスレッドで実行されます。

(4) 処理結果

Eden領域:

使用中のオブジェクトに対応した領域にマークが付きます。

5.の処理でEdenリージョンが回収された場合,領域サイズが減少します。

Survivor領域:

使用中のオブジェクトに対応した領域にマークが付きます。

5.の処理でSurvivorリージョンが回収された場合,領域サイズが減少します。

Tenured領域:

使用中のオブジェクトに対応した領域にマークが付きます。

5.の処理でTenuredリージョンが回収された場合,領域サイズが減少します。

Humongous領域:

使用中のオブジェクトに対応した領域にマークが付きます。

5.の処理でHumongousリージョンが回収された場合,領域サイズが減少します。

Metaspace領域:

変化はありません。

Free領域:

使用中のオブジェクトが1つも存在しないリージョンを回収した場合,領域サイズが増加します。

(5) アプリケーションの停止の有無

  1. Concurrent Root Region Scan:

    CMスレッドで,アプリケーションを停止しないで実行されます。

  2. Concurrent Mark:

    CMスレッドで,アプリケーションを停止しないで実行されます。

  3. Remark:

    VMスレッドで,アプリケーションを停止して実行されます。

  4. Cleanup:

    VMスレッドで,アプリケーションを停止して実行されます。

  5. Concurrent Cleanup:

    CMスレッドで,アプリケーションを停止しないで実行されます。

アプリケーションは停止しませんが,4.の処理の終了から5.の処理が終了するまでの間にFullGCや新しいリージョンの確保がされた場合,5.の処理が終了するまで,YoungGC(normal)やFullGCや新しいリージョンの確保の処理を待たせます。

(6) ほかのGCとの関係

注 CMの処理中はYoungGC(initial-mark)は発生しません。

  1. Concurrent Root Region Scan:

    • YoungGC(normal):実行されません。

    • MixedGC:実行されません。

    • FullGC:実行されません。

  2. Concurrent Mark:

    • YoungGC(normal):2.の処理中に実行された場合,2.の処理を中断します。YoungGC(normal)が終了すると,再開されます。

    • MixedGC:実行されません。

    • FullGC:2.の処理中に実行された場合,2.の処理を中止します。途中結果は破棄されます。

  3. Remark:

    • YoungGC(normal):実行されません。

    • MixedGC:実行されません。

    • FullGC:実行されません。

  4. Cleanup:

    • YoungGC(normal):実行されません。

    • MixedGC:実行されません。

    • FullGC:実行されません。

  5. Concurrent Cleanup:

    • YoungGC(normal):5.の処理中に実行された場合,5.の処理が終了するまでYoungGC(normal)を待機させます。

    • MixedGC:実行されません。

    • FullGC:5.の処理中に実行された場合,5.の処理が終了するまでFullGCを待機させます。

(7) 補足

VCMのログが複数行にわたるため,CMログは開始時にStart,終了時にEndが出力されます。複数行に渡る場合,CPU使用時間はEndのログにStartからEndまでの処理時間が出力され,Startのログは0が出力されます。ログの記述内容や詳細に関しては,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「-XX:[+|-]HitachiVerboseGC(拡張verbosegc情報出力オプション)」を参照してください。

またRemark,Cleanupの処理は処理中にアプリケーションを停止するため,VG1ログに出力されます。Remark,Cleanupの処理はGCログのGC種別が“CM Remark”,“CM Cleanup”という出力から判断できます。