アプリケーションの開発
![]() |
![]() |
![]() |
![]() |
BEA JRockit SDK には JVM のプロファイリング インタフェース (JVMPI) と デバッグ インタフェース (JVMDI) が含まれています。プロファイリング アクティビティとデバッグ アクティビティを支援するために、Java アプリケーションが JVM と対話できるようにするインタフェースです。開発者はこれらのインタフェースをアプリケーション コードに実装する必要がありますが、ユーザ側では通常、実行するアプリケーションで選択したプロファイリング ツールとデバッグ ツールを通じて、JVMPI や JVMDI に接することになります。
さまざまなサードパーティのプロファイリング ツールを使用して、BEA JRockit のパフォーマンスをプロファイリングできます。この節では、それらのツールを使いやすくするために、Java Virtual Machine Profiler Interface (JVMPI) を使用する方法について説明します。
JVM Profiler Interface を利用すると、BEA JRockit でサードパーティのプロファイリング ツールを使用できます。
警告 : このインタフェースは Java 2 SDK の実験的な機能であり、まだ標準のプロファイリング インタフェースではありません。
JVMPI は、Java 仮想マシンとインプロセスのプロファイラ エージェントとの間の、双方向の関数呼び出しインタフェースです。仮想マシンは、ヒープの割り当てやスレッドの開始などに対応するさまざまなイベントを、プロファイラ エージェントに通知します。同時に、プロファイラ エージェントは、JVMPI を介して詳細に関する制御と要求を発行します。たとえば、プロファイラ エージェントは、プロファイラ フロントエンドの要求に基づいて、特定のイベント通知を有効または無効にすることができます。
プロファイラ フロントエンドは、必ずしもプロファイラ エージェントと同じプロセスで動作する必要はありません。同じマシン上の別のプロセスや、ネットワークを介して接続されたリモート マシン上のプロセスに置くこともできます。JVMPI では標準の通信プロトコルを指定していません。ツール ベンダはさまざまなプロファイラ フロントエンドの必要性に適した通信プロトコルを設計できます。
JVMPI に基づいたプロファイリング ツールを使用すると、多量のメモリが割り当てられている場所、CPU 使用率のホットスポット、不要なオブジェクトの保持、モニタの競合など、パフォーマンスの包括的な分析に役立つさまざまな情報を取得できます。
JVMPI によって、部分的なプロファイリングもサポートされています。ユーザは、VM が動作する特定の期間を指定してアプリケーションのプロファイリングを行ったり、特定の種類のプロファイリング情報を選んで取得したりできます。
注意 : JVMPI は 1 つの VM につき 1 つのエージェントだけをサポートします。
JVMPI のデフォルトの動作を変更するには、以下のオプションを使用します。
-Xjvmpi [:<argument1>=<value1>[,<argumentN>=<valueN>]]
BEA JRockit にプロファイリング エージェントを追加して実行する場合、デフォルトでは多数のイベントが有効になっており、オーバーヘッドが高くなる可能性があります。JVMPI ではこれらのイベントをすべて送信する必要はないため、-Xjvmpi
フラグを設定してイベントを無効にすることができます。表 4-1 に示す引数を使用して、デフォルトの動作を変更します。
JVMPI は実験的なインタフェースですが、Sun Microsystems では、Java VM でプロファイリング用フックをすぐに必要としているツール ベンダのためにドキュメントを提供しています。このドキュメントは以下で入手できます。
http://java.sun.com/products/jdk/1.2/docs/guide/jvmpi/
JVMPI の補助的なコンポーネントは、Java 2 SDK に付属している HPROF プロファイリング エージェントです。HPROF は、JVMPI と対話してプロファイリング情報をファイルまたはソケットに書き込む、動的にリンクされたライブラリです。プロファイラ フロントエンド ツールを使用してその情報を処理することができます。
HPROF は CPU 使用率、ヒープ割り当ての統計、モニタ競合プロファイルなどの情報を表示します。詳細なヒープ ダンプや BEA JRockit のすべてのモニタとスレッドの状態も報告できます。
HPROF を実行するには、起動時に -Xrunhprof
コマンドを使用します。次に例を示します。
java -Xrunhprof ClassToProfile
要求されたプロファイリングのタイプに応じて、HPROF は関連する JVMPI イベントを送信するように仮想マシンに指示し、そのイベント データをプロファイリング情報に処理します。たとえば、以下のコマンドではヒープ割り当てのプロファイルを取得します。
java -Xrunhprof:heap=sites ToBeProfiledClass
HPROF は J2SE SDK の一部として配布されています。この機能の詳しいドキュメントは以下にあります。
http://java.sun.com/j2se/1.4.2/docs/guide/jvmpi/jvmpi.html#hprof
この節では、デバッグ ツールが BEA JRockit とやり取りして Java アプリケーションをデバッグできるようにするためのインタフェースについて説明します。
JVMDI は、デバッガや他のプログラミング ツールで使用される低レベルのデバッグ インタフェースです。JVMDI を使用すると、BEA JRockit JVM で動作しているアプリケーションの状態を調べて、実行を制御できます。
JVMDI では、JVM 内で動作する Java アプリケーションをデバッグできるように JVM が提供する機能について記述されています。JVMDI では、JVM がデバッグのために提供する必要のあるサービスを定義しています。JVMDI のサービスには、(現在のスタック フレームなどの) 情報の要求、(ブレークポイントの設定などの) アクション、(ブレークポイントに到達した時点での) 通知があります。
JVMDI クライアントはデバッグ対象のアプリケーションと同じ VM 内で動作し、ネイティブ インタフェースを介して JVMDI にアクセスします。ネイティブのインプロセス インタフェースを使用すると、デバッグ ツールによる最小限の命令で最大限に制御することができます。通常、JVMDI クライアントは比較的小さいサイズです。JVMDI クライアントは、デバッガの機能を実装する独立したプロセスによって、対象アプリケーションの通常の実行を妨げることなく制御されます。
Sun Microsystems は、Java Platform Debugger Architecture および JVMDI に関する詳細なリファレンスのドキュメントを提供しています。詳細については、以下を参照してください。
![]() ![]() |
![]() |
![]() |