Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 拡張編


7.6.1 Explicitメモリブロックのライフサイクルと状態

ここでは,Explicitメモリブロックのライフサイクルと状態について説明します。

明示管理ヒープ機能では,Explicitメモリブロックを解放する方法として,次の2種類の解放処理があります。

Explicitメモリブロックの解放処理が異なることで,指定方法や処理が異なります。8.7以降で,解放処理ごとに詳しく説明します。

〈この項の構成〉

(1) Explicitメモリブロックのライフサイクル

Explicitメモリブロックのライフサイクルを次の図に示します。

図7‒9 Explicitメモリブロックのライフサイクル

[図データ]

図に示したライフサイクルの各段階について説明します。

Explicitメモリブロックの初期化とExplicitメモリブロックの無効化

Explicitメモリブロックの初期化が実行され,Explicitメモリブロックが生成されます。

  • HTTPセッションに関するオブジェクトを格納するExplicitメモリブロックは,Webコンテナによって初期化されます。

  • アプリケーションで任意のオブジェクトをExplicitヒープに配置する場合は,明示管理ヒープ機能APIを使用して,明示的にExplicitメモリブロックを初期化します。

なお,初期化実行時の状態によっては,Explicitメモリブロックが無効化されることがあります。

Explicitメモリブロックの初期化で実行される処理,およびExplicitメモリブロックが無効化される条件については,「7.6.2 Explicitメモリブロックの初期化」で説明します。

Explicitメモリブロックへのオブジェクトの生成

アプリケーションで任意のオブジェクトをExplicitメモリブロックに格納する場合,明示管理ヒープ機能APIを使用して,オブジェクトをExplicitメモリブロックに生成,配置します。

Explicitメモリブロックへのオブジェクトの生成については,「7.6.3 Explicitメモリブロックへのオブジェクトの直接生成」で説明します。

Explicitメモリブロックの拡張

利用中にオブジェクトを配置する領域が不足した場合,JavaVMによってExplicitメモリブロックの拡張が実行されます。

Explicitメモリブロックの拡張については,「7.6.4 Explicitメモリブロックの拡張」で説明します。

Explicitメモリブロックの解放予約と解放処理

Explicitメモリブロックの解放予約と解放処理は,明示管理ヒープ機能の自動解放機能の有効(-XX:+HitachiExplicitMemoryAutoReclaim)・無効(-XX:-HitachiExplicitMemoryAutoReclaim)で挙動が異なります。

自動解放機能が有効な場合(-XX:+HitachiExplicitMemoryAutoReclaim)

なお,javagcコマンドを使用すると,解放されていないExplicitメモリブロックに対して,任意のタイミングで解放処理を実行できます。javagcコマンドによるExplicitメモリブロックの解放処理については,「7.9 javagcコマンドによるExplicitメモリブロックの解放」を参照してください。

自動解放機能が無効な場合(-XX:-HitachiExplicitMemoryAutoReclaim)
  • Explicitメモリブロックの明示解放予約

    Explicitメモリブロックに配置したオブジェクトが不要になった場合は,Explicitメモリブロック単位で解放を予約します。

  1. HTTPセッションに関するオブジェクトを格納したExplicitメモリブロックは,Webコンテナによって解放が予約されます。

  2. アプリケーションで任意のオブジェクトをExplicitメモリブロックに格納した場合は,明示管理ヒープ機能APIを使用して,明示的にExplicitメモリブロックの解放を予約します。

自動解放機能が無効な場合のExplicitメモリブロックの明示解放予約については,「7.8.1 自動解放機能が無効な場合のExplicitメモリブロックの明示解放予約」を参照してください。なお,明示解放予約を実行した段階では,まだExplicitメモリブロックは破棄されていません。

  • Explicitメモリブロックの解放処理

    解放が予約されたExplicitメモリブロックは,CopyGCまたはFullGCが発生したタイミングで,JavaVMによって解放されます。同時にExplicitメモリブロックに配置したオブジェクトも破棄されます。ただし,一部のオブジェクトは破棄されないで,Javaヒープに移動します。

    自動解放機能が無効な場合のExplicitメモリブロックの解放処理については,「7.8.2 自動解放機能が無効な場合のExplicitメモリブロックの解放処理」を参照してください。

(2) Explicitメモリブロックの状態

Explicitメモリブロックは,ライフサイクルの各段階で,有効,解放済み,解放予約済みなどの状態に遷移します。

さらに,有効な状態のExplicitメモリブロックは,次の表に示すサブ状態を保持します。

表7‒4 Explicitメモリブロックのサブ状態

サブ状態

Explicitメモリブロックの状態

Enable

初期状態です。Explicitメモリブロックのすべての機能が使用できます。

Disable

該当するExplicitメモリブロックにJavaオブジェクトを移動できない状態です。Explicitメモリブロックを拡張したときに,この状態になることがあります。