Hitachi

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


7.12.1 オブジェクトをExplicitヒープに配置するための実装

ここでは,明示管理ヒープ機能APIのクラスの概要と,APIの基本的な利用方法について説明します。

〈この項の構成〉

(1) ExplicitMemoryインスタンスとExplicitメモリブロックの関係

Explicitヒープ内のExplicitメモリブロックは,明示管理ヒープ機能APIで扱うExplicitMemoryクラスのインスタンスと1:1で対応します。

ExplicitMemoryインスタンスとExplicitメモリブロックの関係を次の図に示します。

図7‒22 ExplicitMemoryインスタンスとExplicitメモリブロックの関係

[図データ]

Explicitメモリブロックは,ExplicitMemoryクラスのコンストラクタを実行すると初期化されます。以降は,初期化されたインスタンスが,Explicitメモリブロックを操作するためのインタフェースになります。図の場合は,インスタンスem1がExplicitメモリブロック1に,インスタンスem2がExplicitメモリブロック2に対応しています。

(2) 明示管理ヒープ機能APIのクラス構成

明示管理ヒープ機能APIのクラスを次の表に示します。

表7‒9 明示管理ヒープ機能APIのクラス

クラス

説明

MemoryAreaクラス

JavaヒープまたはExplicitメモリブロックを表現する抽象クラスです。

ExplicitMemoryクラス

Explicitメモリブロックを表現する抽象クラスです。このクラスの機能は,派生クラスであるBasicExplicitMemoryクラスを介して利用します。

BasicExplicitMemoryクラス

アプリケーションで扱うExplicitメモリブロックを表現するクラスです。アプリケーションでは,このクラスのAPIを使用して明示管理ヒープ機能を実装します。

クラスの階層を次の図に示します。

図7‒23 明示管理ヒープ機能APIのクラス階層

[図データ]

(3) 明示管理ヒープ機能APIの利用方法

基本的な操作とメソッドの対応は次のとおりです。

次に,BasicExplicitMemoryクラスの利用例を示します。この例では,二つのExplicitメモリブロックを作成します。

BasicExplicitMemoryクラスの利用例

Javaプログラム

01

02

03

04

05

06

07

08

BasicExplicitMemory em1 = new BasicExplicitMemory();

BasicExplicitMemory em2 = new BasicExplicitMemory();

Object o1 = em1.newInstance(Object.class);

Object o2 = em2.newInstance(Object.class);

ExplicitMemory.reclaim(em1);

01行目と02行目では,BasicExplicitMemoryインスタンスを生成しています。この例では,em1がExplicitメモリブロック1,em1がExplicitメモリブロック2に対応するものとします。

04行目および06行目のnewInstanceメソッドによって,Explicitメモリブロックにオブジェクトを直接生成します。04行目では,em1インスタンスからnewInstanceメソッドを呼び出すことで,ObjectクラスのオブジェクトをExplicitメモリブロック1に配置します。06行目では,em2インスタンスからnewInstanceメソッドを呼び出すことで,ObjectクラスのオブジェクトをExplicitメモリブロック2に配置します。

Explicitメモリブロックが不要になったら,Explicitメモリブロックを破棄します。08行目のExplicitMemory.reclaim(em1)メソッドの実行は,Explicitメモリブロック1を解放するための処理です。これによって,Explicitメモリブロック1が解放され,同時に04行目で生成したオブジェクトo1も破棄されます。なお,Explicitメモリブロックの解放は,オブジェクト単位ではなく,該当のExplicitメモリブロックに対応する領域全体が対象になります。

この例の場合,Explicitメモリブロック1の生存期間は,01行目から08行目になります。