Hitachi

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


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

ここでは,Explicitメモリブロックにオブジェクトを直接生成する方法と実行される処理について説明します。

アプリケーションでExplicitメモリブロックにオブジェクトを生成するためには,「(1)実行契機」で示すAPIを使用します。APIを実行すると,引数で指定したクラスのオブジェクトがExplicitメモリブロックに生成されます。ただし,そのオブジェクトのコンストラクタなどによる初期化処理中に生成されたオブジェクトについては,Javaヒープに生成されます。

〈この項の構成〉

(1) 実行契機

アプリケーションで明示管理ヒープ機能を使用する場合,Explicitメモリブロックへのオブジェクトの直接生成は,次のどれかの明示管理ヒープ機能APIを呼び出すことで実行できます。

また,これらのAPIのほかに,明示管理ヒープ自動配置設定ファイルで指定したオブジェクトが生成され,Explicitメモリブロックの初期化が実行されたタイミングでも,Explicitメモリブロックにオブジェクトが直接生成されます。

J2EEサーバが配置するオブジェクトについては,意識する必要はありません。

(2) 実行される内容

APIごとに実行される内容を説明します。

表7‒5 APIごとに実行される内容

API

実施される内容

ExplicitMemory.newInstance(Class type)

引数typeで指定したクラスをインスタンス化して,レシーバが示すExplicitメモリブロックに配置します。

ExplicitMemory.newInstance(Class type, Object... args)

ExplicitMemory.newInstance(java.lang.reflect.Constructor cons, Object... args)

java.lang.reflect.Constructorが示すクラスをインスタンス化して,レシーバが示すExplicitメモリブロックに配置します。

ExplicitMemory.newArray(Class type, int number)

引数typeで指定したクラスの配列を,引数numberで指定した長さでインスタンス化して,レシーバが示すExplicitメモリブロックに配置します。

ExplicitMemory.newArray(Class type, int[] dimensions)

引数typeで指定したクラスの配列を,引数dimensionsで指定した次元数でインスタンス化して,レシーバが示すExplicitメモリブロックに配置します。

APIの詳細については,マニュアル「アプリケーションサーバ リファレンス API編」の「10.3 ExplicitMemoryクラス」を参照してください。

ただし,配置先のExplicitメモリブロックに必要な領域を確保できない場合は,生成したオブジェクトがExplicitメモリブロックに配置されません。生成したオブジェクトはJavaヒープに配置されます。

領域を確保できない要因および実行される処理については,「7.6.4 Explicitメモリブロックの拡張」の拡張処理を実行できない場合の説明を参照してください。