7.13.3 設定ファイルを使った明示管理ヒープ機能の適用対象の制御
自動配置機能で作成したExplicitメモリブロックにあるオブジェクトから参照されているオブジェクトは,GC発生時にJavaヒープからExplicitヒープへ参照関係に基づいて移動します。明示管理ヒープ機能適用除外クラス指定機能は,設定ファイルを使って,この参照関係に基づく移動の対象となるオブジェクトを明示管理ヒープ機能の適用対象から除外し,Explicitヒープへ移動させないようにします。この機能を使用すると,アプリケーションの停止まで使用されるオブジェクトなど,FullGCでも回収されないオブジェクトを,明示管理ヒープ機能の適用対象から除外できます。オブジェクトの参照関係に基づいた移動については「7.6.5 参照関係に基づくオブジェクトのJavaヒープからExplicitメモリブロックへの移動」を参照してください。
(1) 設定ファイルの種類
明示管理ヒープ機能適用除外クラス指定機能で使用するファイルには,次の2種類があります。
-
Explicitヒープへ移動させたくないオブジェクトのクラスを指定します。このファイルに指定したクラスのオブジェクトは,GCが発生しても,Explicitヒープへ移動しません。昇格するタイミングでTenured領域へ移動します。
明示管理ヒープ機能適用除外設定ファイルには,システムで提供しているファイルがあります。明示管理ヒープ機能適用除外クラス指定機能を有効にすると,システムで提供している明示管理ヒープ機能適用除外設定ファイルが使用されます。システムで提供している明示管理ヒープ機能適用除外設定ファイルのファイルパスを次に示します。
- Windowsの場合
-
<JDKインストールディレクトリ>\lib\explicitmemory\sysexmemexcludeclass1100.cfg
- UNIXの場合
-
/opt/Cosminexus/jdk/lib/explicitmemory/sysexmemexcludeclass1100.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の二つのクラスがあります。各設定ファイルを次のように指定します。
-
明示管理ヒープ機能適用除外設定ファイルの指定例
com.sample.*
-
明示管理ヒープ機能適用除外無効設定ファイルの指定例
com.sample.ClassB
明示管理ヒープ機能適用除外設定ファイルの指定には,ClassAとClassBの両方が含まれています。しかし,明示管理ヒープ機能適用除外無効設定ファイルの指定が優先されるため,次の図のように,明示管理ヒープ機能の適用が除外されるのはClassAだけとなり,ClassBには明示管理ヒープ機能が適用されます。
(3) 設定ファイルの記述形式
設定ファイルの記述形式を次に示します。
-
配列型以外の場合
<指定したクラスの完全修飾クラス名>※#コメント : <指定したクラスの完全修飾クラス名>※
- 注※
-
クラス名は,「*」を使用すると省略できます。
-
配列型の場合
<配列の次元数分の"[">※L<指定したクラスの完全修飾クラス名>;
- 注※
-
多次元配列のときは,「[」を次元数分続けて指定します。3次元配列の場合は「[[[」となります。
- (例)aaa.bbb.Myclassクラスの1次元配列の場合
-
[Laaa.bbb.Myclass;
- ポイント
-
-
クラス名は1行に一つずつ記述します。
-
1行に記述できる文字数は1,024文字までです。この文字数は空文字やコメントを含みます。1行に1,025文字以上記述すると,パースに失敗してワーニングメッセージを出力し,その行を無視して読み込み処理を続けます。
-
クラス名は,「<パッケージ名>.*」と指定すると省略できます。Java言語のimport宣言の「*」とは異なり,サブパッケージのクラスも対象となります。
-
行末は,改行文字(「\n」もしくは「0x0A」)または復帰文字(「\r」もしくは「0x0D」)が1文字以上続いたものとなります。
-
空白文字は,半角スペース文字(「0x20」)またはタブ文字(「\t」もしくは「0x09」)となります。なお,設定ファイルに空白文字を記述した場合は無視されます。
-
コメントは,「#」で始まり,「#」から行末までの間の文字すべてをコメントとします。
-
(4) 設定ファイルの記述例
明示管理ヒープ機能適用除外設定ファイル,および明示管理ヒープ機能適用除外無効設定ファイルの記述例を次に示します。
なお,ここで説明する記述例は,パッケージ名が「com.sample」で,次の図に示すクラス構造とします。
-
完全修飾クラス名で指定する場合
完全修飾クラス名で指定する場合の明示管理ヒープ機能適用除外設定ファイルの記述例を次に示します。
com.sample.aaa.ClassA com.sample.aaa.ClassC com.sample.ddd.ClassD
この例では,ClassAクラス,ClassCクラス,およびClassDクラスのオブジェクトがTenured領域へ移動します。
-
クラス名を省略して指定する場合
クラス名を省略して指定する場合の明示管理ヒープ機能適用除外設定ファイル,および明示管理ヒープ機能適用除外無効設定ファイルの記述例を次に示します。
-
明示管理ヒープ機能適用除外設定ファイルの記述例
com.sample.*
-
明示管理ヒープ機能適用除外無効設定ファイルの記述例
com.sample.aaa.ClassB com.sample.ddd.ClassE
この例では,明示管理ヒープ機能適用除外設定ファイルの記述から,同一パッケージ内のクラスだけでなく,サブパッケージに存在するクラスも含めすべてのクラスがTenured領域への移動対象となります。しかし,明示管理ヒープ機能適用設定ファイルの記述から,ClassBクラスとClassEクラスのオブジェクトがExplicitメモリブロックへの移動対象となります。このため,ClassAクラス,ClassCクラス,およびClassDクラスのオブジェクトがTenured領域へ移動します。
- ポイント
-
完全修飾クラス名で指定するか,またはクラス名を省略して指定するかは,設定ファイルの記述量が少ない方で指定することをお勧めします。記述例はどちらも同じ制御となります。この場合は,クラス名を省略して指定する方が望ましい記述です。
-