10 HotSpot VM内のDTraceプローブ
この章では、OracleのHotSpot VMにおけるDTraceのサポートについて説明します。hotspotおよびhotspot_jniプロバイダによって、実行中のJavaアプリケーション、およびJava仮想マシン(JVM)の内部状態とアクティビティのモニターに使用できるプローブにアクセスできます。プローブはすべてUSDTプローブであり、JVMプロセスのプロセスIDを使用してアクセスできます。
hotspotプロバイダの使用
hotspotプロバイダによって、VMの存続期間、スレッドの開始および終了イベント、ガベージ・コレクタ(GC)およびメモリー・プール統計、メソッド・コンパイル、ならびにモニター活動の追跡に使用できるプローブにアクセスできます。起動フラグにより、実行中のJavaプログラム(オブジェクト割当て、メソッドに入るプローブやメソッドから戻るプローブなど)のモニターに使用できる追加プローブが有効になります。hotspotプローブはVMライブラリ(libjvm.so)を基準にしているため、VMが埋め込まれたプログラムから提供されます。
プロバイダ内のプローブの多くには、VMの状態に関する詳細を提供する引数があります。これらの引数の多くは、プローブの起動を相互にリンクするために使用できる不透明なIDです。ただし、文字列およびその他のデータも提供されます。文字列値が提供される場合、それらは常に、終了されていない変更されたUTF-8データ(JVM仕様を参照)へのポインタとそのデータの範囲を示す長さの値のペアです。文字列データはNUL文字で終了されている保証はなく、長さで終了されるcopyinstr()
組込みを使用して、文字列データを読み取る必要があります。このことは、ASCIIの範囲外の文字がない場合にも該当します。
VMライフサイクル・プローブ
VMライフサイクル・アクティビティの追跡には、次のプローブを使用できます。いずれも引数は取りません。
表10-1 VMライフサイクル・プローブ
プローブ | 説明 |
---|---|
vm-init-begin |
VM初期化が開始されるときに起動するプローブ |
vm-init-end |
VM初期化が終了するときに起動するプローブで、VMはアプリケーション・コードの実行を開始する準備ができています |
vm-shutdown |
プログラム終了またはエラーによってVMがシャットダウンするときに起動するプローブ |
スレッド・ライフサイクル・プローブ
スレッドの開始および終了イベントの追跡には、次のプローブを使用できます。
プローブ | 説明 |
---|---|
|
スレッドが開始されるときに起動するプローブ。 |
|
スレッドが完了したときに起動するプローブ。 |
スレッド・ライフサイクル・プローブには、次の引数を使用できます。
プローブの引数 | 説明 |
---|---|
|
スレッド名を含むUTF-8文字列データへのポインタ |
|
スレッド名データの長さ(バイト単位) |
|
JavaスレッドID。この値はスレッド引数を含む他のHotSpot VMプローブに対応します |
|
ネイティブ/OSスレッドID。このIDはホスト・オペレーティング・システムによって割り当てられます |
|
このスレッドがデーモンかどうかを示すブール値。値0は、デーモン以外のスレッドを示します |
クラス・ロード・プローブ
クラスのロードおよびアンロード・アクティビティの追跡には、次のプローブを使用できます。
プローブ | 説明 |
---|---|
|
クラスがロードされたときに起動するプローブ |
|
クラスがシステムからアンロードされたときに起動するプローブ |
クラス・ロード
・プローブには、次の引数を使用できます。
プローブの引数 | 説明 |
---|---|
|
ロードされたクラスの名前を含むUTF-8文字列データへのポインタ |
|
クラス名データの長さ(バイト単位) |
|
クラス・ローダーID。VM内のクラス・ローダーの一意の識別子です。(これは、クラスをロードしたクラス・ローダーです) |
|
クラスが共有クラスかどうか(クラスが共有アーカイブからロードされたかどうか)を示すブール値 |
ガベージ・コレクション・プローブ
システム全体のガベージ・コレクション・サイクルの期間を測定するために使用できるプローブがあります(開始および終了が定義されているガベージ・コレクタについて)。各メモリー・プールは個別に追跡されます。プール・コレクションの開始と終了の両方で、個々のプールのプローブはメモリー・マネージャの名前、プール名、およびプール使用状況の情報を渡します。
ガベージ・コレクション・アクティビティの追跡には、次のプローブを使用できます。
プローブ | 説明 |
---|---|
|
システム全体のコレクションが開始されるときに起動するプローブ。このプローブに使用できる1つの引数( |
|
システム全体のコレクションが完了したときに起動するプローブ。引数はありません。 |
|
個々のメモリー・プールが収集されるときに起動するプローブ。 |
|
個々のメモリー・プールが収集された後で起動するプローブ。 |
メモリー・プール・プローブには、次の引数を使用できます。
プローブの引数 | 説明 |
---|---|
|
このメモリー・プールを管理するマネージャの名前を含むUTF-8文字列データへのポインタ |
|
マネージャ名データの長さ(バイト単位) |
|
メモリー・プールの名前を含むUTF-8文字列データへのポインタ |
|
メモリー・プール名データの長さ(バイト単位) |
|
メモリー・プールの初期サイズ(バイト単位) |
|
メモリー・プール内の使用中のメモリー量(バイト単位) |
|
メモリー・プール内のコミット済みページ数 |
|
メモリー・プールの最大サイズ |
メソッド・コンパイル・プローブ
どのメソッドがどのコンパイラによってコンパイルされているかを示すために、およびコンパイルされたメソッドがインストールまたはアンインストールされたときを追跡するために、プローブを使用できます。
メソッド・コンパイルの開始および終了を示すために、次のプローブを使用できます。
プローブ | 説明 |
---|---|
|
メソッド・コンパイルが開始されるときに起動するプローブ。 |
|
メソッド・コンパイルが完了したときに起動するプローブ。次の引数に加え、 |
メソッド・コンパイル・プローブには、次の引数を使用できます。
プローブの引数 | 説明 |
---|---|
|
このメソッドをコンパイルしているコンパイラの名前を含むUTF-8文字列データへのポインタ |
|
コンパイラ名データの長さ(バイト単位) |
|
コンパイルされているメソッドのクラスの名前を含むUTF-8文字列データへのポインタ |
|
クラス名データの長さ(バイト単位) |
|
コンパイルされているメソッドの名前を含むUTF-8文字列データへのポインタ |
|
メソッド名データの長さ(バイト単位) |
|
コンパイルされているメソッドのシグニチャを含むUTF-8文字列データへのポインタ |
|
シグニチャ・データの長さ(バイト単位) |
コンパイルされたメソッドが実行用にインストールまたはアンインストールされるときに、次のプローブを使用できます。
プローブ | 説明 |
---|---|
|
コンパイルされたメソッドがインストールされるときに起動するプローブ。その他の引数として、 |
|
コンパイルされたメソッドがアンインストールされるときに起動するプローブ。 |
コンパイルされたメソッドのロード・プローブには、次の引数を使用できます。
プローブの引数 | 説明 |
---|---|
|
インストールされているメソッドのクラスの名前を含むUTF-8文字列データへのポインタ |
|
クラス名データの長さ(バイト単位) |
|
インストールされているメソッドの名前を含むUTF-8文字列データへのポインタ |
|
メソッド名データの長さ(バイト単位) |
|
インストールされているメソッドのシグニチャを含むUTF-8文字列データへのポインタ |
|
シグニチャ・データの長さ(バイト単位) |
モニター・プローブ
Javaアプリケーションが実行されるとき、スレッドはモニターへの出入り、モニターでの待機、および通知を実行します。プローブは、すべての待機イベントおよび通知イベントに使用できます。また、競合するモニターに入るイベントおよびモニターから出るイベントにも使用できます。
競合するモニターに入るイベントは、別のスレッドがモニター内にあるときに、スレッドがモニターに入ろうとする場合に発生します。競合するモニターから出るイベントは、スレッドがモニターから出るときに、他のスレッドがモニターに入るのを待機している場合に発生します。競合するモニターに入るイベントと競合するモニターから出るイベントは、これらのイベントに遭遇する1つのスレッドについては一致しませんが、競合するスレッドから出るイベントは、競合する別のスレッド(モニターに入るのを待機しているスレッド)に入るイベントと一致すると考えられます。
モニター・イベントはスレッドID、モニターID、およびオブジェクトのクラスのタイプを引数として提供します。スレッドIDおよびクラスは、Javaプログラムへマッピングで戻ることができます。一方、モニターIDはプローブ起動間の一致情報を提供できます。
VM内にこれらのプローブが存在することによってパフォーマンスが低下するので、これらはJavaコマンドラインで-XX:+ExtendedDTraceProbes
フラグが設定された場合にのみ起動します。このフラグは、jinfo
ユーティリティを使用することによって、実行時に動的にオンおよびオフにできます。
フラグがオフの場合、モニター・プローブはDtraceから取得可能なプローブ・リストに存在しますが、プローブは休止状態であり起動しません。この制限は、VMの今後のリリースでは削除される予定です。これらのプローブは、パフォーマンスに影響を与えることなく有効になる予定です。
イベントのモニターには、次のプローブを使用できます。
プローブ | 説明 |
---|---|
|
競合するモニターにスレッドが入ろうとしたときに起動するプローブ |
|
競合するモニターにスレッドが正常に入るときに起動するプローブ |
|
あるスレッドがモニターを出るときに、他のスレッドが入るのを待機している場合に起動するプローブ |
|
|
|
スレッドが |
|
スレッドが |
|
スレッドが |
モニターには、次の引数を使用できます。
プローブの引数 | 説明 |
---|---|
|
モニター・オペレーションを実行するスレッドのJavaスレッド識別子 |
|
アクションが実行される特定のモニターの一意だが不透明な識別子 |
|
アクションが実行されているオブジェクトのクラス名を含むUTF-8文字列データへのポインタ |
|
クラス名データの長さ(バイト単位) |
アプリケーション追跡プローブ
Javaスレッド実行を精査するためのプローブを使用できます。アプリケーション追跡プローブは、メソッドに入るときやメソッドから戻るとき、およびJavaオブジェクトが割り当てられたときに起動します。
VM内にこれらのプローブが存在することによってパフォーマンスが低下するので、これらはVMでExtendedDTraceProbes
フラグが有効な場合にのみ起動します。デフォルトでは、プローブはVM内のプローブのリストに存在しますが、適切なフラグが立っていない場合は休止状態です。この制限は、VMの今後のリリースでは削除される予定です。これらのプローブは、パフォーマンスに影響を与えることなく有効になる予定です。
メソッドの出入りには、次のプローブを使用できます。
プローブ | 説明 |
---|---|
|
メソッドに入っているときに起動するプローブ。 |
|
正常に、または例外によって、メソッドから戻るときに起動するプローブ。 |
メソッドの出入りには、次の引数を使用できます。
プローブの引数 | 説明 |
---|---|
|
メソッドに入る、またはメソッドを出るスレッドのJavaスレッドID |
|
メソッドのクラスの名前を含むUTF-8文字列データへのポインタ |
|
クラス名データの長さ(バイト単位) |
|
メソッドの名前を含むUTF-8文字列データへのポインタ |
|
メソッド名データの長さ(バイト単位) |
|
メソッドのシグニチャを含むUTF-8文字列データへのポインタ |
|
シグニチャ・データの長さ(バイト単位) |
オブジェクト割当てには、次のプローブを使用できます。
プローブ | 説明 |
---|---|
|
|
オブジェクト割当てプローブには、次の引数を使用できます。
プローブの引数 | 説明 |
---|---|
|
オブジェクトを割り当てているスレッドのJavaスレッドID |
|
割り当てられているオブジェクトのクラス名を含むUTF-8文字列データへのポインタ |
|
クラス名データの長さ(バイト単位) |
|
割り当てられているオブジェクトのサイズ |
hotspot_jniプロバイダの使用
ネイティブ・コードからJavaコードを呼び出す場合、アプリケーションへのVMの埋込みやJavaアプリケーション内でのネイティブ・コードの実行のため、ネイティブ・コードはJava Native Interface (JNI)によって呼出しを行う必要があります。JNIは、Javaコードの呼出しとVMの状態の検査のために、いくつかのメソッドを提供します。DTraceプローブは、これらの各メソッドのエントリ・ポイントとリターン・ポイントで提供されます。プローブは、hotspot_jniプロバイダによって提供されます。プローブの名前は、JNIメソッドの名前に、入るプローブの場合は-entry
、戻るプローブの場合は-return
を付けたものとなります。それぞれの入るプローブで使用可能な引数は、その機能に提供された引数です。この場合、Invoke*
メソッドは例外で、Javaメソッドに渡される引数を省略します。戻るプローブには、引数としてメソッドの戻り値があります(利用可能な場合)。
サンプルDTraceプローブ
provider hotspot {
probe vm-init-begin();
probe vm-init-end();
probe vm-shutdown();
probe class-loaded(
char* class_name, uintptr_t class_name_len, uintptr_t class_loader_id, bool is_shared);
probe class-unloaded(
char* class_name, uintptr_t class_name_len, uintptr_t class_loader_id, bool is_shared);
probe gc-begin(bool is_full);
probe gc-end();
probe mem-pool-gc-begin(
char* mgr_name, uintptr_t mgr_name_len, char* pool_name, uintptr_t pool_name_len,
uintptr_t initial_size, uintptr_t used, uintptr_t committed, uintptr_t max_size);
probe mem-pool-gc-end(
char* mgr_name, uintptr_t mgr_name_len, char* pool_name, uintptr_t pool_name_len,
uintptr_t initial_size, uintptr_t used, uintptr_t committed, uintptr_t max_size);
probe thread-start(
char* thread_name, uintptr_t thread_name_length,
uintptr_t java_thread_id, uintptr_t native_thread_id, bool is_daemon);
probe thread-stop(
char* thread_name, uintptr_t thread_name_length,
uintptr_t java_thread_id, uintptr_t native_thread_id, bool is_daemon);
probe method-compile-begin(
char* class_name, uintptr_t class_name_len,
char* method_name, uintptr_t method_name_len,
char* signature, uintptr_t signature_len);
probe method-compile-end(
char* class_name, uintptr_t class_name_len,
char* method_name, uintptr_t method_name_len,
char* signature, uintptr_t signature_len,
bool is_success);
probe compiled-method-load(
char* class_name, uintptr_t class_name_len,
char* method_name, uintptr_t method_name_len,
char* signature, uintptr_t signature_len,
void* code, uintptr_t code_size);
probe compiled-method-unload(
char* class_name, uintptr_t class_name_len,
char* method_name, uintptr_t method_name_len,
char* signature, uintptr_t signature_len);
probe monitor-contended-enter(
uintptr_t java_thread_id, uintptr_t monitor_id,
char* class_name, uintptr_t class_name_len);
probe monitor-contended-entered(
uintptr_t java_thread_id, uintptr_t monitor_id,
char* class_name, uintptr_t class_name_len);
probe monitor-contended-exit(
uintptr_t java_thread_id, uintptr_t monitor_id,
char* class_name, uintptr_t class_name_len);
probe monitor-wait(
uintptr_t java_thread_id, uintptr_t monitor_id,
char* class_name, uintptr_t class_name_len,
uintptr_t timeout);
probe monitor-waited(
uintptr_t java_thread_id, uintptr_t monitor_id,
char* class_name, uintptr_t class_name_len);
probe monitor-notify(
uintptr_t java_thread_id, uintptr_t monitor_id,
char* class_name, uintptr_t class_name_len);
probe monitor-notifyAll(
uintptr_t java_thread_id, uintptr_t monitor_id,
char* class_name, uintptr_t class_name_len);
probe method-entry(
uintptr_t java_thread_id, char* class_name, uintptr_t class_name_len,
char* method_name, uintptr_t method_name_len,
char* signature, uintptr_t signature_len);
probe method-return(
uintptr_t java_thread_id, char* class_name, uintptr_t class_name_len,
char* method_name, uintptr_t method_name_len,
char* signature, uintptr_t signature_len);
probe object-alloc(
uintptr_t java_thread_id, char* class_name, uintptr_t class_name_len,
uintptr_t size);
};
provider hotspot_jni {
probe AllocObject-entry(void*, void*);
probe AllocObject-return(void*);
probe AttachCurrentThreadAsDaemon-entry(void*, void**, void*);
probe AttachCurrentThreadAsDaemon-return(uint32_t);
probe AttachCurrentThread-entry(void*, void**, void*);
probe AttachCurrentThread-return(uint32_t);
probe CallBooleanMethodA-entry(void*, void*, uintptr_t);
probe CallBooleanMethodA-return(uintptr_t);
probe CallBooleanMethod-entry(void*, void*, uintptr_t);
probe CallBooleanMethod-return(uintptr_t);
probe CallBooleanMethodV-entry(void*, void*, uintptr_t);
probe CallBooleanMethodV-return(uintptr_t);
probe CallByteMethodA-entry(void*, void*, uintptr_t);
probe CallByteMethodA-return(char);
probe CallByteMethod-entry(void*, void*, uintptr_t);
probe CallByteMethod-return(char);
probe CallByteMethodV-entry(void*, void*, uintptr_t);
probe CallByteMethodV-return(char);
probe CallCharMethodA-entry(void*, void*, uintptr_t);
probe CallCharMethodA-return(uint16_t);
probe CallCharMethod-entry(void*, void*, uintptr_t);
probe CallCharMethod-return(uint16_t);
probe CallCharMethodV-entry(void*, void*, uintptr_t);
probe CallCharMethodV-return(uint16_t);
probe CallDoubleMethodA-entry(void*, void*, uintptr_t);
probe CallDoubleMethodA-return(double);
probe CallDoubleMethod-entry(void*, void*, uintptr_t);
probe CallDoubleMethod-return(double);
probe CallDoubleMethodV-entry(void*, void*, uintptr_t);
probe CallDoubleMethodV-return(double);
probe CallFloatMethodA-entry(void*, void*, uintptr_t);
probe CallFloatMethodA-return(float);
probe CallFloatMethod-entry(void*, void*, uintptr_t);
probe CallFloatMethod-return(float);
probe CallFloatMethodV-entry(void*, void*, uintptr_t);
probe CallFloatMethodV-return(float);
probe CallIntMethodA-entry(void*, void*, uintptr_t);
probe CallIntMethodA-return(uint32_t);
probe CallIntMethod-entry(void*, void*, uintptr_t);
probe CallIntMethod-return(uint32_t);
probe CallIntMethodV-entry(void*, void*, uintptr_t);
probe CallIntMethodV-return(uint32_t);
probe CallLongMethodA-entry(void*, void*, uintptr_t);
probe CallLongMethodA-return(uintptr_t);
probe CallLongMethod-entry(void*, void*, uintptr_t);
probe CallLongMethod-return(uintptr_t);
probe CallLongMethodV-entry(void*, void*, uintptr_t);
probe CallLongMethodV-return(uintptr_t);
probe CallNonvirtualBooleanMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualBooleanMethodA-return(uintptr_t);
probe CallNonvirtualBooleanMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualBooleanMethod-return(uintptr_t);
probe CallNonvirtualBooleanMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualBooleanMethodV-return(uintptr_t);
probe CallNonvirtualByteMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualByteMethodA-return(char);
probe CallNonvirtualByteMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualByteMethod-return(char);
probe CallNonvirtualByteMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualByteMethodV-return(char);
probe CallNonvirtualCharMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualCharMethodA-return(uint16_t);
probe CallNonvirtualCharMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualCharMethod-return(uint16_t);
probe CallNonvirtualCharMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualCharMethodV-return(uint16_t);
probe CallNonvirtualDoubleMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualDoubleMethodA-return(double);
probe CallNonvirtualDoubleMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualDoubleMethod-return(double);
probe CallNonvirtualDoubleMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualDoubleMethodV-return(double);
probe CallNonvirtualFloatMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualFloatMethodA-return(float);
probe CallNonvirtualFloatMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualFloatMethod-return(float);
probe CallNonvirtualFloatMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualFloatMethodV-return(float);
probe CallNonvirtualIntMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualIntMethodA-return(uint32_t);
probe CallNonvirtualIntMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualIntMethod-return(uint3t);
probe CallNonvirtualIntMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualIntMethodV-return(uint32_t);
probe CallNonvirtualLongMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualLongMethodA-return(uintptr_t);
probe CallNonvirtualLongMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualLongMethod-return(uintptr_t);
probe CallNonvirtualLongMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualLongMethodV-return(uintptr_t);
probe CallNonvirtualObjectMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualObjectMethodA-return(void*);
probe CallNonvirtualObjectMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualObjectMethod-return(void*);
probe CallNonvirtualObjectMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualObjectMethodV-return(void*);
probe CallNonvirtualShortMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualShortMethodA-return(uint16_t);
probe CallNonvirtualShortMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualShortMethod-return(uint16_t);
probe CallNonvirtualShortMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualShortMethodV-return(uint16_t);
probe CallNonvirtualVoidMethodA-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualVoidMethodA-return();
probe CallNonvirtualVoidMethod-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualVoidMethod-return();
probe CallNonvirtualVoidMethodV-entry(void*, void*, void*, uintptr_t);
probe CallNonvirtualVoidMethodV-return();
probe CallObjectMethodA-entry(void*, void*, uintptr_t);
probe CallObjectMethodA-return(void*);
probe CallObjectMethod-entry(void*, void*, uintptr_t);
probe CallObjectMethod-return(void*);
probe CallObjectMethodV-entry(void*, void*, uintptr_t);
probe CallObjectMethodV-return(void*);
probe CallShortMethodA-entry(void*, void*, uintptr_t);
probe CallShortMethodA-return(uint16_t);
probe CallShortMethod-entry(void*, void*, uintptr_t);
probe CallShortMethod-return(uint16_t);
probe CallShortMethodV-entry(void*, void*, uintptr_t);
probe CallShortMethodV-return(uint16_t);
probe CallStaticBooleanMethodA-entry(void*, void*, uintptr_t);
probe CallStaticBooleanMethodA-return(uintptr_t);
probe CallStaticBooleanMethod-entry(void*, void*, uintptr_t);
probe CallStaticBooleanMethod-return(uintptr_t);
probe CallStaticBooleanMethodV-entry(void*, void*, uintptr_t);
probe CallStaticBooleanMethodV-return(uintptr_t);
probe CallStaticByteMethodA-entry(void*, void*, uintptr_t);
probe CallStaticByteMethodA-return(char);
probe CallStaticByteMethod-entry(void*, void*, uintptr_t);
probe CallStaticByteMethod-return(char);
probe CallStaticByteMethodV-entry(void*, void*, uintptr_t);
probe CallStaticByteMethodV-return(char);
probe CallStaticCharMethodA-entry(void*, void*, uintptr_t);
probe CallStaticCharMethodA-return(uint16_t);
probe CallStaticCharMethod-entry(void*, void*, uintptr_t);
probe CallStaticCharMethod-return(uint16_t);
probe CallStaticCharMethodV-entry(void*, void*, uintptr_t);
probe CallStaticCharMethodV-return(uint16_t);
probe CallStaticDoubleMethodA-entry(void*, void*, uintptr_t);
probe CallStaticDoubleMethodA-return(double);
probe CallStaticDoubleMethod-entry(void*, void*, uintptr_t);
probe CallStaticDoubleMethod-return(double);
probe CallStaticDoubleMethodV-entry(void*, void*, uintptr_t);
probe CallStaticDoubleMethodV-return(double);
probe CallStaticFloatMethodA-entry(void*, void*, uintptr_t);
probe CallStaticFloatMethodA-return(float);
probe CallStaticFloatMethod-entry(void*, void*, uintptr_t);
probe CallStaticFloatMethod-return(float);
probe CallStaticFloatMethodV-entry(void*, void*, uintptr_t);
probe CallStaticFloatMethodV-return(float);
probe CallStaticIntMethodA-entry(void*, void*, uintptr_t);
probe CallStaticIntMethodA-return(uint32_t);
probe CallStaticIntMethod-entry(void*, void*, uintptr_t);
probe CallStaticIntMethod-return(uint32_t);
probe CallStaticIntMethodentry(void*, void*, uintptr_t);
probe CallStaticIntMethodV-return(uint32_t);
probe CallStaticLongMethodA-entry(void*, void*, uintptr_t);
probe CallStaticLongMethodA-return(uintptr_t);
probe CallStaticLongMethod-entry(void*, void*, uintptr_t);
probe CallStaticLongMethod-return(uintptr_t);
probe CallStaticLongMethodV-entry(void*, void*, uintptr_t);
probe CallStaticLongMethodV-return(uintptr_t);
probe CallStaticObjectMethodA-entry(void*, void*, uintptr_t);
probe CallStaticObjectMethodA-return(void*);
probe CallStaticObjectMethod-entry(void*, void*, uintptr_t);
probe CallStaticObjectMethod-return(void*);
probe CallStaticObjectMethodV-entry(void*, void*, uintptr_t);
probe CallStaticObjectMethodV-return(void*);
probe CallStaticShortMethodA-entry(void*, void*, uintptr_t);
probe CallStaticShortMethodA-return(uint16_t);
probe CallStaticShortMethod-entry(void*, void*, uintptr_t);
probe CallStaticShortMethod-return(uint16_t);
probe CallStaticShortMethodV-entry(void*, void*, uintptr_t);
probe CallStaticShortMethodV-return(uint16_t);
probe CallStaticVoidMethodA-entry(void*, void*, uintptr_t);
probe CallStaticVoidMethodA-return();
probe CallStaticVoidMethod-entry(void*, void*, uintptr_t);
probe CallStaticVoidMethod-return();
probe CallStaticVoidMethodV-entry(void*, void*, uintptr_t);
probe CallStaticVoidMethodV-return();
probe CallVoidMethodA-entry(void*, void*, uintptr_t);
probe CallVoidMethodA-return();
probe CallVoidMethod-entry(void*, void*, uintptr_t);
probe CallVoidMethod-return();
probe CallVoidMethodV-entry(void*, void*, uintptr_t);
probe CallVoidMethodV-return();
probe CreateJavaVM-entry(void**, void**, void*);
probe CreateJavaVM-return(uint32_t);
probe DefineClass-entry(void*, const char*, void*, char, uintptr_t);
probe DefineClass-return(void*);
probe DeleteGlobalRef-entry(void*, void*);
probe DeleteGlobalRef-return();
probe DeleteLocalRef-entry(void*, void*);
probe DeleteLocalRef-return();
probe DeleteWeakGlobalRef-entry(void*, void*);
probe DeleteWeakGlobalRef-return();
probe DestroyJavaVM-entry(void*);
probe DestroyJavaVM-return(uint32_t);
probe DetachCurrentThread-entry(void*);
probe DetachCurrentThread-return(uint32_t);
probe EnsureLocalCapacity-entry(void*, uint32_t);
probe EnsureLocalCapacity-return(uint32_t);
probe ExceptionCheck-entry(void*);
probe ExceptionCheck-return(uintptr_t);
probe ExceptionClear-entry(void*);
probe ExceptionClear-return();
probe ExceptionDescribe-entry(void*);
probe ExceptionDescribe-return();
probe ExceptionOccurred-entry(void*);
probe ExceptionOccurred-return(void*);
probe FatalError-entry(void* env, const char*);
probe FindClass-entry(void*, const char*);
probe FindClass-return(void*);
probe FromReflectedField-entry(void*, void*);
probe FromReflectedField-return(uintptr_t);
probe FromReflectedMethod-entry(void*, void*);
probe FromReflectedMethod-return(uintptr_t);
probe GetArrayLength-entry(void*, void*);
probe GetArrayLength-return(uintptr_t);
probe GetBooleanArrayElements-entry(void*, void*, uintptr_t*);
probe GetBooleanArrayElements-return(uintptr_t*);
probe GetBooleanArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, uintptr_t*);
probe GetBooleanArrayRegion-return();
probe GetBooleanField-entry(void*, void*, uintptr_t);
probe GetBooleanField-return(uintptr_t);
probe GetByteArrayElements-entry(void*, void*, uintptr_t*);
probe GetByteArrayElements-return(char*);
probe GetByteArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, char*);
probe GetByteArrayRegion-return();
probe GetByteField-entry(void*, void*, uintptr_t);
probe GetByteField-return(char);
probe GetCharArrayElements-entry(void*, void*, uintptr_t*);
probe GetCharArrayElements-return(uint16_t*);
probe GetCharArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, uint16_t*);
probe GetCharArrayRegion-return();
probe GetCharField-entry(void*, void*, uintptr_t);
probe GetCharField-return(uint16_t);
probe GetCreatedJavaVMs-eintptr_t*);
probe GetCreatedJavaVMs-return(uintptr_t);
probe GetCreateJavaVMs-entry(void*, uintptr_t, uintptr_t*);
probe GetCreateJavaVMs-return(uint32_t);
probe GetDefaultJavaVMInitArgs-entry(void*);
probe GetDefaultJavaVMInitArgs-return(uint32_t);
probe GetDirectBufferAddress-entry(void*, void*);
probe GetDirectBufferAddress-return(void*);
probe GetDirectBufferCapacity-entry(void*, void*);
probe GetDirectBufferCapacity-return(uintptr_t);
probe GetDoubleArrayElements-entry(void*, void*, uintptr_t*);
probe GetDoubleArrayElements-return(double*);
probe GetDoubleArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, double*);
probe GetDoubleArrayRegion-return();
probe GetDoubleField-entry(void*, void*, uintptr_t);
probe GetDoubleField-return(double);
probe GetEnv-entry(void*, void*, void*);
probe GetEnv-return(uint32_t);
probe GetFieldID-entry(void*, void*, const char*, const char*);
probe GetFieldID-return(uintptr_t);
probe GetFloatArrayElements-entry(void*, void*, uintptr_t*);
probe GetFloatArrayElements-return(float*);
probe GetFloatArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, float*);
probe GetFloatArrayRegion-return();
probe GetFloatField-entry(void*, void*, uintptr_t);
probe GetFloatField-return(float);
probe GetIntArrayElements-entry(void*, void*, uintptr_t*);
probe GetIntArrayElements-return(uint32_t*);
probe GetIntArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, uint32_t*);
probe GetIntArrayRegion-return();
probe GetIntField-entry(void*, void*, uintptr_t);
probe GetIntField-return(uint32_t);
probe GetJavaVM-entry(void*, void**);
probe GetJavaVM-return(uint32_t);
probe GetLongArrayElements-entry(void*, void*, uintptr_t*);
probe GetLongArrayElements-return(uintptr_t*);
probe GetLongArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, uintptr_t*);
probe GetLongArrayRegion-return();
probe GetLongField-entry(void*, void*, uintptr_t);
probe GetLongField-return(uintptr_t);
probe GetMethodID-entry(void*, void*, const char*, const char*);
probe GetMethodID-return(uintptr_t);
probe GetObjectArrayElement-entry(void*, void*, uintptr_t);
probe GetObjectArrayElement-return(void*);
probe GetObjectClass-entry(void*, void*);
probe GetObjectClass-return(void*);
probe GetObjectField-entry(void*, void*, uintptr_t);
probe GetObjectField-return(void*);
probe GetObjectRefType-entry(void*, void*);
probe GetObjectRefType-return(void*);
probe GetPrimitiveArrayCritical-entry(void*, void*, uintptr_t*);
probe GetPrimitiveArrayCritical-return(void*);
probe GetShortArrayElements-entry(void*, void*, uintptr_t*);
probe GetShortArrayElements-return(uint16_t*);
probe GetShortArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, uint16_t*);
probe GetShortArrayRegion-return();
probe GetShortField-entry(void*, void*, uintptr_t);
probe GetShortField-return(uint16_t);
probe GetStaticBooleanField-entry(void*, void*, uintptr_t);
probe GetStaticBooleanField-return(uintptr_t);
probe GetStaticByteField-entry(void*, void*, uintptr_t);
probe GetStaticByteField-return(char);
probe GetStaticCharField-entry(void*, void*, uintptr_t);
probe GetStaticCharField-return(uint16_t);
probe GetStaticDoubleField-entry(void*, void*, uintptr_t);
probe GetStaticDoubleField-return(double);
probe GetStaticFieldID-entry(void*, void*, const char*, const char*);
probe GetStaticFieldID-return(uintptr_t);
probe GetStaticFloatField-entry(void*, void*, uintptr_t);
probe GetStaticFloatField-return(float);
probe GetStaticIntField-entry(void*, void*, uintptr_t);
probe GetStaticIntField-return(uint32_t);
probe GetStaticLongField-entry(void*, void*, uintptr_t);
probe GetStaticLongField-return(uintptr_t);
probe GetStaticMethodID-entry(void*, void*, const char*, const char*);
probe GetStaticMethodID-return(uintptr_t);
probe GetStaticObjectField-entry(void*, void*, uintptr_t);
probe GetStaticObjectField-return(void*);
probe GetStaticShortField-entry(void*, void*, uintptr_t);
probe GetStaticShortField-return(uint16_t);
pro GetStringChars-entry(void*, void*, uintptr_t*);
probe GetStringChars-return(const uint16_t*);
probe GetStringCritical-entry(void*, void*, uintptr_t*);
probe GetStringCritical-return(const uint16_t*);
probe GetStringLength-entry(void*, void*);
probe GetStringLength-return(uintptr_t);
probe GetStringRegion-entry(void*, void*, uintptr_t, uintptr_t, uint16_t*);
probe GetStringRegion-return();
probe GetStringUTFChars-entry(void*, void*, uintptr_t*);
probe GetStringUTFChars-return(const char*);
probe GetStringUTFLength-entry(void*, void*);
probe GetStringUTFLength-return(uintptr_t);
probe GetStringUTFRegion-entry(void*, void*, uintptr_t, uintptr_t, char*);
probe GetStringUTFRegion-return();
probe GetSuperclass-entry(void*, void*);
probe GetSuperclass-return(void*);
probe GetVersion-entry(void*);
probe GetVersion-return(uint32_t);
probe IsAssignableFrom-entry(void*, void*, void*);
probe IsAssignableFrom-return(uintptr_t);
probe IsInstanceOf-entry(void*, void*, void*);
probe IsInstanceOf-return(uintptr_t);
probe IsSameObject-entry(void*, void*, void*);
probe IsSameObject-return(uintptr_t);
probe MonitorEnter-entry(void*, void*);
probe MonitorEnter-return(uint32_t);
probe MonitorExit-entry(void*, void*);
probe MonitorExit-return(uint32_t);
probe NewBooleanArray-entry(void*, uintptr_t);
probe NewBooleanArray-return(void*);
probe NewByteArray-entry(void*, uintptr_t);
probe NewByteArray-return(void*);
probe NewCharArray-entry(void*, uintptr_t);
probe NewCharArray-return(void*);
probe NewDirectByteBuffer-entry(void*, void*, uintptr_t);
probe NewDirectByteBuffer-return(void*);
probe NewDoubleArray-entry(void*, uintptr_t);
probe NewDoubleArray-return(void*);
probe NewFloatArray-entry(void*, uintptr_t);
probe NewFloatArray-return(void*);
probe NewGlobalRef-entry(void*, void*);
probe NewGlobalRef-return(void*);
probe NewIntArray-entry(void*, uintptr_t);
probe NewIntArray-return(void*);
probe NewLocalRef-entry(void*, void*);
probe NewLocalRef-return(void*);
probe NewLongArray-entry(void*, uintptr_t);
probe NewLongArray-return(void*);
probe NewObjectA-entry(void*, void*, uintptr_t);
probe NewObjectA-return(void*);
probe NewObjectArray-entry(void*, uintptr_t, void*, void*);
probe NewObjectArray-return(void*);
probe NewObject-entry(void*, void*, uintptr_t);
probe NewObject-return(void*);
probe NewObjectV-entry(void*, void*, uintptr_t);
probe NewObjectV-return(void*);
probe NewShortArray-entry(void*, uintptr_t);
probe NewShortArray-return(void*);
probe NewString-entry(void*, const uint16_t*, uintptr_t);
probe NewString-return(void*);
probe NewStringUTF-entry(void*, const char*);
probe NewStringUTF-return(void*);
probe NewWeakGlobalRef-entry(void*, void*);
probe NewWeakGlobalRef-return(void*);
probe PopLocalFrame-entry(void*, void*);
probe PopLocalFrame-return(void*);
probe PushLocalFrame-entry(void*, uint32_t);
probe PushLocalFrame-return(uint32_t);
probe RegisterNatives-entry(void*, void*, const void*, uint32_t);
probe RegisterNatives-return(uint32_t);
probe ReleaseBooleanArrayElements-entry(void*, void*, uintptr_t*, uint32_t);
probe ReleaseBooleanArrayElements-return();
probe ReleaseByteArrayElements-entry(void*, void*, char*, uint32_t);
probe ReleaseByteArrayElements-return();
probe ReleaseCharArrayElements-entry(void*, void*, uint16_t*, uint32_t);
probe ReleaseCharArrayElements-return();
probe ReleaseDoubleArrayElements-entry(void*, void*, double*, uint32_t);
probe ReleaseDoubleArrayElements-return();
probe ReleaseFloatArrayElements-entry(void*, void*, float*, uint32_t);
probe ReleaseFloatArrayElements-return();
probe ReleaseIntArrayElements-entry(void*, void*, uint32_t*, uint32_t);
probe ReleaseIntArrayElements-return();
probe ReleaseLongArrayElements-entry(void*, void*, uintptr_t*, uint32_t);
probe ReleaseLongArrayElements-return();
probe ReleaseObjectArrayElements-entry(void*, void*, void**, uint32_t);
probe ReleaseObjectArrayElements-return();
probe Releasey(void*, void*, void*, uint32_t);
probe ReleasePrimitiveArrayCritical-return();
probe ReleaseShortArrayElements-entry(void*, void*, uint16_t*, uint32_t);
probe ReleaseShortArrayElements-return();
probe ReleaseStringChars-entry(void*, void*, const uint16_t*);
probe ReleaseStringChars-return();
probe ReleaseStringCritical-entry(void*, void*, const uint16_t*);
probe ReleaseStringCritical-return();
probe ReleaseStringUTFChars-entry(void*, void*, const char*);
probe ReleaseStringUTFChars-return();
probe SetBooleanArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, const uintptr_t*);
probe SetBooleanArrayRegion-return();
probe SetBooleanField-entry(void*, void*, uintptr_t, uintptr_t);
probe SetBooleanField-return();
probe SetByteArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, const char*);
probe SetByteArrayRegion-return();
probe SetByteField-entry(void*, void*, uintptr_t, char);
probe SetByteField-return();
probe SetCharArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, const uint16_t*);
probe SetCharArrayRegion-return();
probe SetCharField-entry(void*, void*, uintptr_t, uint16_t);
probe SetCharField-return();
probe SetDoubleArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, const double*);
probe SetDoubleArrayRegion-return();
probe SetDoubleField-entry(void*, void*, uintptr_t, double);
probe SetDoubleField-return();
probe SetFloatArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, const float*);
probe SetFloatArrayRegion-return();
probe SetFloatField-entry(void*, void*, uintptr_t, float);
probe SetFloatField-return();
probe SetIntArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, const uint32_t*);
probe SetIntArrayRegion-return();
probe SetIntField-entry(void*, void*, uintptr_t, uint32_t);
probe SetIntField-return();
probe SetLongArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, const uintptr_t*);
probe SetLongArrayRegion-return();
probe SetLongField-entry(void*, void*, uintptr_t, uintptr_t);
probe SetLongField-return();
probe SetObjectArrayElement-entry(void*, void*, uintptr_t, void*);
probe SetObjectArrayElement-return();
probe SetObjectField-entry(void*, void*, uintptr_t, void*);
probe SetObjectField-return();
probe SetShortArrayRegion-entry(void*, void*, uintptr_t, uintptr_t, const uint16_t*);
probe SetShortArrayRegion-return();
probe SetShortField-entry(void*, void*, uintptr_t, uint16_t);
probe SetShortField-return();
probe SetStaticBooleanField-entry(void*, void*, uintptr_t, uintptr_t);
probe SetStaticBooleanField-return();
probe SetStaticByteField-entry(void*, void*, uintptr_t, char);
probe SetStaticByteField-return();
probe SetStaticCharField-entry(void*, void*, uintptr_t, uint16_t);
probe SetStaticCharField-return();
probe SetStaticDoubleField-entry(void*, void*, uintptr_t, double);
probe SetStaticDoubleField-return();
probe SetStaticFloatField-entry(void*, void*, uintptr_t, float);
probe SetStaticFloatField-return();
probe SetStaticIntField-entry(void*, void*, uintptr_t, uint32_t);
probe SetStaticIntField-return();
probe SetStaticLongField-entry(void*, void*, uintptr_t, uintptr_t);
probe SetStaticLongField-return();
probe SetStaticObjectField-entry(void*, void*, uintptr_t, void*);
probe SetStaticObjectField-return();
probe SetStaticShortField-entry(void*, void*, uintptr_t, uint16_t);
probe SetStaticShortField-return();
probe Throw-entry(void*, void*);
probe ThrowNew-entry(void*, void*, const char*);
probe ThrowNew-return(uint32_t);
probe Throw-return(uint32_t);
probe ToReflectedField-entry(void*, void*, uintptr_t, uintptr_t);
probe ToReflectedField-return(void*);
probe ToReflectedMethod-entry(void*, void*, uintptr_t, uintptr_t);
probe ToReflectedMethod-return(void*);
probe UnregisterNatives-entry(void*, void*);
probe UnregisterNatives-return(uint32_t);
};