Java Web Startアプリケーションとアプレットでは、直接起動のかわりにアタッチ・メカニズムを使用する必要あることを除き、スタンドアロン・アプリケーションのデバッグおよびプロファイリングで利用できる手法のほとんどを使用できます。
注意: プラグインとJava Web Startは、実際にアプリケーションまたはアプレットを実行するJVMを実行する追加のjava
またはjavaw
プロセスを生成します。アプレットに関する情報を収集できるように、これらのプロセスにアタッチする必要があります。たとえば、アプレットのメモリー・ダンプを取得するには、まずPluginMain
クラスを実行しているjava
プロセスのプロセスIDを調べる必要があります。たとえば、JDKからjpsユーティリティを使用した後、jmapユーティリティを使用してメモリー・ダンプを取得します。
アプレットのデバッグのための開発のヒントを次に示します。
アプレットおよびWeb Startアプリケーションのデバッグ:
スタンドアロンJavaアプリケーションの場合と同様に、アプレットまたはWeb Startアプリケーションのデバッグには、任意のJPDAベースのデバッガを使用できます。たとえば、「jdbユーティリティ」またはNetBeansデバッガを参照してください。
アプリケーションを実行するJVMでJDWPエージェントを有効にし、ポート番号を指定する必要があります。JVMが起動されたら、任意のIDEやツールを使ってそのJVMに接続できます。
アプレットまたはJava Web Startアプリケーションを実行するJVMに引数を渡す方法の詳細は、「JREへのパラメータの受渡し」を参照してください。図16-1に、コマンド行からJava Web Startアプリケーションに詳細情報を渡す方法を示します。
図16-1 Java Web Startアプリケーションをデバッグするコマンド行オプション
bash$ javaws -J-agentlib:jdwp=transport=dt_socket,address=4000,server=y,suspend=y http://acme.com/my/webstart.jnlp
ここではエージェントが、JVMの初期化後に一時停止し、デバッガがポート4000上で接続してくるのを待つように指示されています。呼出しのオプションの詳細は、jdpa
のドキュメントを参照してください。
Web StartアプリケーションのFAQは、Java Web Startを参照してください。
JavaアプレットおよびJava Web Startアプリケーションのプロファイリング:
スタンドアロンのJavaアプリケーションをプロファイリングするときに、任意のIDEはおそらく、JVMTIエージェントを使ってプログラムの実行に関する詳細情報を収集します。アプレットやJava Web Startアプリケーションでも同じことを行えますが、 図16-2に示すように、-agentpath
オプションをJVMに渡してJVMTIエージェントを明示的に構成する必要がある場合があります。JVMにオプションを渡す方法の詳細は、「JREへのパラメータの受渡し」を参照してください。
例16-2 JVMTIエージェントの構成
set _JPI_VM_OPTIONS="-agentpath:C:\Tools\NetBeans\profiler\lib\deployed\jdk16\windows\profilerinterface.dll=C:\Tools\NetBeans\profiler\lib,5140"
次にブラウザを起動します。このブラウザ・セッションで実行されるすべてのアプレットで、NetBeansプロファイル・エージェントが有効になります。NetBeans IDEを使ってjava
プロセスに接続できます。使用すべきエージェントやその構成方法に関する具体的な詳細については、プロファイラのドキュメントを参照してください。
メモリー・リークのデバッグ:
アプレットまたはアプリケーションを実行しているプロセス上のスタンドアロン・アプリケーションで使用できる手法については、「メモリー・リークのトラブルシューティング」参照してください。たとえば、jmap
を使ってヒープ・ダンプを取得したり、VisualVMやjconsole
を使ってスレッドを監視したり、-XX:+HeapDumpOnOutOfMemoryError
をJVMに渡して(「JREへのパラメータの受け渡し」を参照)エラー時にメモリー・ダンプを取得したりします。jps
ユーティリティを使ってアプリケーションを実行しているプロセスのプロセスIDを調べます。