Stop The World

提供: Java入門
移動: 案内検索
スポンサーリンク

JavaにおけるStop The World(ストップ ザ ワールド)とは、Javaアプリケーションで Full GC(ガベージコレクション)が実行されたときに、すべてのアプリケーションスレッドが停止する事象です。ユーザから見るとアプリケーションが停止しているように見えます。ガベージコレクションの時間が長くなるとアプリケーションの停止は無視できないものとなります。

読み方

Stop The World
すとっぷ ざ わーるど

概要

短命なプログラムでは、Stop The World を気にすることも意識することもないかもしれません。

あくまでも人だけを前提とした話になりますが、人間が利用するアプリケーションの場合は、200ミリ秒以下のStop The Worldであれば、通常は考慮しなくても大丈夫です。人間は、200ミリ秒程度であれば、近くできません。

低レイテンシのアプリケーションについては、200ミリ秒の停止であっても許されない場合があります。トレーディングシステムのようなアプリケーションでは、ガベージコレクタの影響に注意する必要があります。

Full GCの時間が増える

Javaで利用するHeapサイズが大きい場合、Full GC時間が無視できなくなることがあります。

ガベージコレクション

Javaは、オブジェクトの生存期間に応じて、GCを効率化します。

New世代GC(マイナーGC)
高速なCopy方式のGCが使用されます。
Old世代GC(メジャー GC, Full GC)
Mark-Sweep-Compact方式のGCが使用されます。

Old世代GCの Mark-Sweep-Compact 方式は、以下の処理を行います。

  • Mark: 生存中の某ジェクトをすべてマーキングします。
  • Sweep: マークがついていないオブジェクトを除去します。
  • Compact: 空き領域を確保するため、Heap内のオブジェクトの再配置を行います。

New世代GCは、領域を分割して、高速なCopy方式でGCを行います。

コンカレントGC

コンカレントGCは、Old世代GCをアプリケーションスレッドと並列に実行します。

コンカレントGCは、4つのフェイズに分割して処理を行います。

-- App Thread --> stop    ---------> -stop-> ---------->
-- App Thread --> stop    ---------> -stop-> ---------->
-- App Thread --> stop    ---------> -stop-> ---------->
-- Concurrent GC -------> --------->         ---------->
                 Initial  Concurrent Remark  Concurrent
        	  Mark     Mark               Mark
  1. Initial Mark
    すべてのスレッドを停止します。
  2. Concurrent Mark
  3. Remark
    すべてのスレッドを停止します。
  4. Concurrent Sweep

関連項目




スポンサーリンク