8.13.3 設定ファイルを使った明示管理ヒープ機能の適用対象の制御

自動配置機能で作成したExplicitメモリブロックにあるオブジェクトから参照されているオブジェクトは,GC発生時にJavaヒープからExplicitヒープへ参照関係に基づいて移動します。明示管理ヒープ機能適用除外クラス指定機能は,設定ファイルを使って,この参照関係に基づく移動の対象となるオブジェクトを明示管理ヒープ機能の適用対象から除外し,Explicitヒープへ移動させないようにします。この機能を使用すると,アプリケーションの停止まで使用されるオブジェクトなど,FullGCでも回収されないオブジェクトを,明示管理ヒープ機能の適用対象から除外できます。オブジェクトの参照関係に基づいた移動については「8.6.5 参照関係に基づくオブジェクトのJavaヒープからExplicitメモリブロックへの移動」を参照してください。

<この項の構成>
(1) 設定ファイルの種類
(2) 設定ファイルの指定と明示管理ヒープ機能の適用範囲
(3) 設定ファイルの記述形式
(4) 設定ファイルの記述例

(1) 設定ファイルの種類

明示管理ヒープ機能適用除外クラス指定機能で使用するファイルには,次の2種類があります。

明示管理ヒープ機能適用除外設定ファイル

Explicitヒープへ移動させたくないオブジェクトのクラスを指定します。このファイルに指定したクラスのオブジェクトは,GCが発生しても,Explicitヒープへ移動しません。昇格するタイミングでTenured領域へ移動します。

明示管理ヒープ機能適用除外設定ファイルには,システムで提供しているファイルがあります。明示管理ヒープ機能適用除外クラス指定機能を有効にすると,システムで提供している明示管理ヒープ機能適用除外設定ファイルが使用されます。システムで提供している明示管理ヒープ機能適用除外設定ファイルのファイルパスを次に示します。

Windowsの場合
<JDKインストールディレクトリ>¥jre¥lib¥explicitmemory¥sysexmemexcludeclass.cfg
UNIXの場合
/opt/Cosminexus/jdk/jre/lib/explicitmemory/sysexmemexcludeclass.cfg

明示管理ヒープ機能の適用対象から除外するクラスを追加したい場合は,次のファイルパスにあるファイルを更新するか,または新たなファイルを作成してください。

Windowsの場合
<JDKインストールディレクトリ>¥usrconf¥exmemexcludeclass.cfg
UNIXの場合
/opt/Cosminexus/jdk/usrconf/exmemexcludeclass.cfg

なお,新たに明示管理ヒープ機能適用除外設定ファイルを作成した場合は,-XX:ExplicitMemoryExcludeClassListFileオプションにファイルパスを指定してください。

明示管理ヒープ機能適用除外無効設定ファイル

明示管理ヒープ機能適用除外設定ファイルに指定したクラスのうち,適用除外設定を無効にしたいクラスを指定します。このファイルに指定したクラスのオブジェクトは,GCが発生すると,Explicitヒープへ移動します。

明示管理ヒープ機能の適用対象から除外されているクラスを無効にしたい場合は,次のファイルパスにあるファイルを更新するか,または新たなファイルを作成してください。システムで提供している明示管理ヒープ機能適用除外設定ファイルに指定されているクラスも設定を無効にできます。

Windowsの場合
<JDKインストールディレクトリ>¥usrconf¥exmemnotexcludeclass.cfg
UNIXの場合
/opt/Cosminexus/jdk/usrconf/exmemnotexcludeclass.cfg

なお,新たに明示管理ヒープ機能適用除外無効設定ファイルを作成した場合は,-XX:ExplicitMemoryNotExcludeClassListFileオプションにファイルパスを指定してください。

(2) 設定ファイルの指定と明示管理ヒープ機能の適用範囲

明示管理ヒープ機能適用除外無効設定ファイルの指定は,明示管理ヒープ機能適用除外設定ファイルの指定よりも優先されます。

パッケージ「com.sample」を例に,設定ファイルの指定と明示管理ヒープ機能の適用範囲について説明します。パッケージ「com.sample」には,ClassAとClassBの二つのクラスがあります。各設定ファイルを次のように指定します。

明示管理ヒープ機能適用除外設定ファイルの指定には,ClassAとClassBの両方が含まれています。しかし,明示管理ヒープ機能適用除外無効設定ファイルの指定が優先されるため,次の図のように,明示管理ヒープ機能の適用が除外されるのはClassAだけとなり,ClassBには明示管理ヒープ機能が適用されます。

[図データ]

(3) 設定ファイルの記述形式

設定ファイルの記述形式を次に示します。

(4) 設定ファイルの記述例

明示管理ヒープ機能適用除外設定ファイル,および明示管理ヒープ機能適用除外無効設定ファイルの記述例を次に示します。

なお,ここで説明する記述例は,パッケージ名が「com.sample」で,次の図に示すクラス構造とします。

図8-27 クラス構造の例

[図データ]

●完全修飾クラス名で指定する場合

完全修飾クラス名で指定する場合の明示管理ヒープ機能適用除外設定ファイルの記述例を次に示します。

com.sample.aaa.ClassA
com.sample.aaa.ClassC
com.sample.ddd.ClassD

この例では,ClassAクラス,ClassCクラス,およびClassDクラスのオブジェクトがTenured領域へ移動します。

●クラス名を省略して指定する場合

クラス名を省略して指定する場合の明示管理ヒープ機能適用除外設定ファイル,および明示管理ヒープ機能適用除外無効設定ファイルの記述例を次に示します。

この例では,明示管理ヒープ機能適用除外設定ファイルの記述から,同一パッケージ内のクラスだけでなく,サブパッケージに存在するクラスも含めすべてのクラスがTenured領域への移動対象となります。しかし,明示管理ヒープ機能適用設定ファイルの記述から,ClassBクラスとClassEクラスのオブジェクトがExplicitメモリブロックへの移動対象となります。このため,ClassAクラス,ClassCクラス,およびClassDクラスのオブジェクトがTenured領域へ移動します。

ポイント
完全修飾クラス名で指定するか,またはクラス名を省略して指定するかは,設定ファイルの記述量が少ない方で指定することをお勧めします。記述例はどちらも同じ制御となります。この場合は,クラス名を省略して指定する方が望ましい記述です。