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
- Initial Mark
- すべてのスレッドを停止します。
- Concurrent Mark
- Remark
- すべてのスレッドを停止します。
- Concurrent Sweep
関連項目
ツイート
スポンサーリンク