付録B.1 デフォルトのクラスローダ構成
新規インストール後のデフォルトのクラスローダ構成を次に示します。
各クラスローダの内容を次に示します。
-
システムクラスローダ
Application Serverのコンポーネントが提供するクラスをロードします。
-
生成タイミング:J2EEサーバ起動時
-
破棄タイミング:J2EEサーバ停止時
-
-
コネクタクラスローダ
単体デプロイされたリソースアダプタに含まれるクラスをロードします。J2EEサーバ内に一つだけ存在します。
-
生成タイミング:J2EEサーバ起動時
-
破棄タイミング:J2EEサーバ停止時
-
-
JavaBeansクラスローダ
JavaBeansリソースのクラスをロードします。
-
生成タイミング:J2EEサーバ起動時
-
破棄タイミング:J2EEサーバ停止時
-
-
アプリケーションクラスローダ
アプリケーション内のEJB-JAR,ライブラリJAR,リソースアダプタに含まれるクラスをロードします。アプリケーションごとに存在します。クラス名はcom.hitachi.software.ejb.server.ApplicationClassLoaderです。
-
生成タイミング:J2EEアプリケーション開始時
cjmessage?.log(J2EEサーバの稼働ログ)にKDJE42143-Iが出力されます(「?」はログの面数)。
-
破棄タイミング:J2EEアプリケーション停止時
cjmessage?.log(J2EEサーバの稼働ログ)にKDJE42144-Iが出力されます(「?」はログの面数)。
-
-
Webアプリケーションクラスローダ
J2EEアプリケーション内のWARファイルに含まれるクラスをロードします。WARファイルごとに存在します。クラス名はorg.apache.catalina.loader.WebappClassLoaderです。
-
生成タイミング:J2EEアプリケーション開始時(Webアプリケーション開始時)
cjmessage?.log(J2EEサーバの稼働ログ)にKDJE39219-Iが出力されます(「?」はログの面数)。
-
破棄タイミング:J2EEアプリケーション停止時(Webアプリケーション停止時)
cjmessage?.log(J2EEサーバの稼働ログ)にKDJE39220-Iが出力されます(「?」はログの面数)。
-
-
JSPクラスローダ
JSPファイルおよびタグファイルをコンパイルしたときに生成されたクラスをロードします。JSPごとに存在します。
-
生成タイミング:JSPクラスロード時
-
破棄タイミング:J2EEアプリケーション停止時(Webアプリケーション停止時)
- ポイント
-
リソースアダプタのロードについて
J2EEリソースアダプタとしてデプロイしたリソースアダプタは,コネクタクラスローダでロードされます。J2EEアプリケーションに含めて使用するリソースアダプタは,アプリケーションクラスローダでロードされます。
- 注意事項
-
クラスローダの破棄について
J2EEアプリケーションの停止後,Webアプリケーションクラスローダまたはアプリケーションクラスローダのファイナライズ処理※(finalizeメソッドの処理)が実行されたタイミングで,KDJE39220-IまたはKDJE42144-Iのメッセージが出力されます。
このメッセージが出力されたあと,FullGCが発生したタイミングで,クラスローダとアプリケーションはヒープから解放されます。
注※ ファイナライズ処理は,ファイナライズ処理専用のスレッド(ファイナライザスレッド)で実行されます。ファイナライザスレッドは,JavaVM実行時に常に一つあり,他のJavaスレッドと並行して動作して,オブジェクトのfinalize()メソッドを一つずつ処理します。
KDJE39220-IまたはKDJE42144-Iのメッセージが出力されない場合,次の原因が考えられます。
- 原因
-
(C-1):アプリケーションクラスローダやアプリケーションへのソフト参照が残っている。
(C-2):Explicitヒープに配置されたオブジェクトからアプリケーションクラスローダやアプリケーションへの参照が残っている。
(C-1)〜(C-2)の原因について,それぞれ次の(I-1)〜(I-2)の原因の切り分けを実施して,メッセージが出力されるか確認してください。
- 原因の切り分け
-
(I-1):-XX:SoftRefLRUPolicyMSPerMB=0を指定して実行する。
なお,SoftRefLRUPolicyMSPerMBオプションについては,マニュアル「アプリケーションサーバ システム設計ガイド」の「7.9 Javaヒープ内のMetaspace領域のメモリサイズの見積もり」を参照してください。
(I-2):明示管理ヒープ機能が有効の場合は,明示管理ヒープ機能を無効(-XX:-HitachiUseExplicitMemory)にする。
なお,明示管理ヒープ機能については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「14.2 JavaVM拡張オプションの詳細」を参照してください。
(C-1)〜(C-2)の原因のどれにも該当しない場合で,アプリケーションの開始または停止を繰り返してもKDJE39220-IまたはKDJE42144-Iメッセージが出力されないときは,メモリリークが発生しているおそれがあります。
-