7.6.4 Explicitメモリブロックの拡張
ここでは,Explicitメモリブロックの拡張処理について説明します。拡張処理が実行されると,Explicitメモリブロック内の空き領域が増加します。
- 〈この項の構成〉
(1) 実行契機
拡張は,JavaVMによって次の契機で実行されます。
-
Explicitメモリブロックに最初のオブジェクトが配置される時
-
オブジェクトを配置するためのExplicitメモリブロックの空き領域が足りない場合
明示管理ヒープ機能APIを使用したアプリケーションからExplicitメモリブロックにオブジェクトを配置しようとした場合に,オブジェクトのサイズが配置対象のExplicitメモリブロックの空き領域を超えるとき,拡張処理が実行されます。
Explicitメモリブロックの初期化後,初めてExplicitメモリブロックにオブジェクトを配置するときには,必ず拡張処理が実行されます。
なお,J2EEサーバがオブジェクトを配置するExplicitメモリブロックでは,Webコンテナによって初期化と最初のオブジェクトの配置が実行されます。実行契機については,「7.4 J2EEサーバ利用時にExplicitヒープに配置されるオブジェクト」を参照してください。
(2) 実行される内容
JavaVMによって,OSからメモリ領域が確保され,該当のExplicitメモリブロックが拡張されます。メモリ領域の確保には,OSのメモリ確保APIが使用されます。
ただし,次の場合,拡張処理が実行されません。
-
Explicitヒープの最大値の制限を超えて拡張しようとした場合
すべてのExplicitメモリブロックの合計サイズに,拡張しようとしたサイズを加えた値が,-XX:HitachiExplicitHeapMaxSizeオプションに指定した値を超えた場合です。
該当するExplicitメモリブロックのサブ状態が「Disable」に変化して,このExplicitメモリブロックへのオブジェクトの配置が中止されます。
「Disable」に変化したExplicitメモリブロックには,以降オブジェクトは配置されません。
-XX:HitachiExplicitHeapMaxSizeオプションについては,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。
-
サブ状態が「Disable」になっているExplicitメモリブロックを拡張しようとした場合
サブ状態が「Disable」になっているExplicitメモリブロックを拡張しようとした場合は,Explicitメモリブロックへのオブジェクトの配置が中止されます。
Explicitメモリブロックの拡張が失敗した場合のサブ状態の変化について,要因ごとに次の表に示します。
拡張が失敗した要因 |
サブ状態の変化 |
---|---|
OSからのメモリ領域の確保に失敗した |
「Enable」→「Disable」 |
Explicitヒープの最大値の制限を超えて拡張しようとした |
「Enable」→「Disable」 |
サブ状態が「Disable」になっているExplicitメモリブロックを拡張しようとした |
変化しません。 |