8.2 exmemexcludeclass.cfg
Explicitヒープへ移動させたくないオブジェクトのクラスを指定する設定ファイルのことです。この設定ファイルを明示管理ヒープ機能適用除外設定ファイルといいます。
説明
Explicitヒープへ移動させたくないオブジェクトのクラスを指定します。この設定ファイルに指定したクラスのオブジェクトは、GCが発生しても、Explicitヒープへ移動しません。昇格するタイミングでTenured領域へ移動します。
明示管理ヒープ機能適用除外設定ファイルには、システムで提供しているファイルがあります。明示管理ヒープ機能適用除外クラス指定機能を有効にすると、システムで提供している設定ファイル(sysexmemexcludeclass.cfg)が使用されます。システムで提供している設定ファイルのほかに、明示管理ヒープ機能の適用対象から除外するクラスを追加したい場合は、格納先に示すファイルパスにある設定ファイルを更新するか、または新たな設定ファイルを作成してください。なお、新たに設定ファイルを作成した場合は、-XX:ExplicitMemoryExcludeClassListFileオプションにファイルパスを指定してください。
システムで提供している設定ファイルのファイルパスを次に示します。
JDKのインストールディレクトリー/jre/lib/explicitmemory/sysexmemexcludeclass.cfg
この設定ファイルに指定したクラスに対して適用除外設定を無効にする制御は、明示管理ヒープ機能適用除外無効設定ファイルで指定できます。明示管理ヒープ機能適用除外無効設定ファイルの指定は、この設定ファイルの指定よりも優先されます。
パッケージ「com.sample」を例に、各設定ファイルの指定と明示管理ヒープ機能の適用範囲について説明します。パッケージ「com.sample」には、ClassAとClassBの2つのクラスがあります。各設定ファイルを次のように指定します。
- 明示管理ヒープ機能適用除外設定ファイルの指定例
-
com.sample.*
- 明示管理ヒープ機能適用除外無効設定ファイルの指定例
-
com.sample.ClassB
明示管理ヒープ機能適用除外設定ファイルの指定には、ClassAとClassBの両方が含まれています。しかし、明示管理ヒープ機能適用除外無効設定ファイルの指定が優先されるため、次の図のように、明示管理ヒープ機能の適用が除外されるのはClassAだけとなり、ClassBには明示管理ヒープ機能が適用されます。
書式
- 配列型以外の場合
-
指定したクラスの完全修飾クラス名#コメント ... 指定したクラスの完全修飾クラス名
- 配列型の場合
-
配列の次元数分の"["※L指定したクラスの完全修飾クラス名;
- 注※
-
多次元配列のときは、「[」を次元数分続けて指定します。3次元配列の場合は「[[[」となります。
(例)aaa.bbb.Myclassクラスの1次元配列の場合
[Laaa.bbb.Myclass;
この設定ファイルの記述規則を次に示します。
-
クラス名は1行に1つずつ記述します。
-
1行に記述できる文字数は1,024文字までです。この文字数は空文字やコメントを含みます。1行に1,025文字以上記述すると、パースに失敗してワーニングメッセージを出力し、その行を無視して読み込み処理を続けます。
-
クラス名は、「パッケージ名.*」と指定すると省略できます。Java言語のimport宣言の「*」とは異なり、サブパッケージのクラスも対象となります。
-
行末は、改行文字(「\n」もしくは「0x0A」)または復帰文字(「\r」もしくは「0x0D」)が1文字以上続いたものとなります。
-
空白文字は、半角スペース文字(「0x20」)またはタブ文字(「\t」もしくは「0x09」)となります。なお、設定ファイルに空白文字を記述した場合は無視されます。
-
コメントは、「#」で始まり、「#」から行末までの間の文字すべてをコメントとします。
格納先
JDKのインストールディレクトリー/usrconf/exmemexcludeclass.cfg
記述例
ここで説明する記述例は、パッケージ名が「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領域へ移動します。
完全修飾クラス名で指定するか、またはクラス名を省略して指定するかは、設定ファイルの記述量が少ない方で指定することをお勧めします。記述例はどちらも同じ制御となります。この場合は、クラス名を省略して指定する方が望ましい記述です。