JIT コンパイル済みコードに関する情報をエージェントに報告します。
int iJIT_NotifyEvent( iJIT_JVM_EVENT event_type, void *EventSpecificData );
関数iJIT_NotifyEventは、event_typeが指すデータとともにEventSpecificDataの通知をエージェントに送信します。レポートされた情報は、インテル® VTune™ プロファイラーのコレクターから取得されたサンプルを関連付けるのに使用されます。この API は、JIT コンパイル後に、JIT コンパイル済みコードの最初のエントリー以前に呼び出す必要があります。
パラメーター |
説明 |
---|---|
iJIT_JVM_EVENT event_type |
エージェントに送信された通知コード。イベントタイプの完全なリストは以下を参照してください。 |
void *EventSpecificData |
イベント固有のデータへのポインター。 |
ここで、event_type には次の値が許可されます :
iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED |
JIT メソッドがメモリーにロードされ (JIT コンパイルされた後)、コードが実行される前にこの通知を送信します。iJIT_Method_Load 構造体を EventSpecificData に使用します。関数iJIT_NotifyEventの戻り値は不定です。 |
iJVM_EVENT_TYPE_SHUTDOWN |
終了するプロファイルにこの通知を送信します。EventSpecificData には NULL を使用します。iJIT_NotifyEventは成功すると 1 を返します。 |
JVM_EVENT_TYPE_METHOD_UPDATE |
この通知を送信して、以前レポートされた動的コードに新しいコンテンツを追加します。以前のコンテンツは通知後無効になります。次の必須フィールドを使用して、iJIT_Method_Load構造体をEventSpecificDataで使用します。
|
JVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED |
インライン動的コードが JIT コンパイルされてメモリーにロードされる場合、親コードが実行を開始する前にこの通知を送信します。EventSpecificData には、iJIT_Method_Inline_Load 構造を使用します。 |
iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2 |
JIT された動的コードがメモリーにロードされ、コードが実行される前にこの通知を送信します。EventSpecificData には、iJIT_Method_Load_V2 構造を使用します。 |
次の構造体を EventSpecificData に使用できます:
iJIT_Method_Inline_Load 構造体
また、iJIT_Method_Inline_Load構造体を使用して JIT コンパイル済みメソッドを記述する場合、レポートするイベントタイプとしてiJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHEDを使用します。iJIT_Method_Inline_Load 構造体には次のフィールドが含まれます:
フィールド |
説明 |
---|---|
unsigned int method_id |
一意なメソッド ID。メソッド ID は 999 以下にはできません。API 関数iJIT_GetNewMethodIDAPI 関数を使用して有効なメソッド ID を取得するか、独自の ID で一意性と適切な範囲を管理します。 |
unsigned int parent_method_id |
直近の親メソッドの ID。メソッド ID は 999 以下にはできません。iJIT_GetNewMethodID API 関数を使用して有効なメソッド ID を取得するか、独自の ID で一意性と適切な範囲を管理します。 |
char *method_name |
メソッドの名前を指定します。オプションでクラス名をプレフィックスとして完全なシグネチャーを追加できます。この引数は NULL にできません。 |
void *method_load_address |
メソッドコードのベースアドレスを指定します。JIT メソッドでない場合 NULL になることがあります。 |
unsigned int method_size |
メソッドがインライン展開されている仮想アドレス。NULL の場合、イベントのデータは受け入れられません。 |
unsigned int line_number_size |
行番号テーブルのエントリー数。0 はエントリーなしを示します。 |
pLineNumberInfo line_number_table |
行番号情報配列へのポインター。line_number_size が 0 の場合 NULL にできます。行番号情報配列の単一エントリーの説明については、LineNumberInfo構造体を参照してください。 |
char *class_file_name |
クラス名。NULL にできます。 |
char *source_file_name |
ソースファイル名。NULL にできます。 |
iJIT_Method_Load 構造体
また、iJIT_Method_Load 構造体を使用して JIT コンパイル済みメソッドを記述する場合、レポートするイベントタイプとしてiJVM_EVENT_TYPE_METHOD_LOAD_FINISHEDを使用します。異なるスレッドから iJIT_Method_Load構造体には次のフィールドが含まれます。
フィールド |
説明 |
---|---|
unsigned int method_id |
一意なメソッド ID。メソッド ID は 999 以下にはできません。API 関数iJIT_GetNewMethodIDAPI 関数を使用して有効なメソッド ID を取得するか、独自の ID で一意性と適切な範囲を管理します。 |
char *method_name |
メソッドの名前を指定します。オプションでクラス名をプレフィックスとして完全なシグネチャーを追加できます。この引数は NULL にできません。 |
void *method_load_address |
メソッドコードのベースアドレスを指定します。JIT メソッドでない場合 NULL になることがあります。 |
unsigned int method_size |
メソッドがインライン展開されている仮想アドレス。NULL の場合、イベントのデータは受け入れられません。 |
unsigned int line_number_size |
行番号テーブルのエントリー数。0 はエントリーなしを示します。 |
pLineNumberInfo line_number_table |
行番号情報配列へのポインター。line_number_size が 0 の場合 NULL にできます。行番号情報配列の単一エントリーの説明については、LineNumberInfo構造体を参照してください。 |
unsigned int class_id |
このフィールドは現在使用されません。 |
char *class_file_name |
クラス名。NULL にできます。 |
char *source_file_name |
ソースファイル名。NULL にできます。 |
void *user_data |
このフィールドは現在使用されません。 |
unsigned int user_data_size |
このフィールドは現在使用されません。 |
iJDEnvironmentType env |
このフィールドは現在使用されません。 |
iJIT_Method_Load_V2 構造体
また、iJIT_Method_Load_V2構造体を使用して JIT コンパイル済みメソッドを記述する場合、レポートするイベントタイプとしてiJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2を使用します。異なるスレッドからiJIT_Method_Load_V2構造体には次のフィールドが含まれます。
フィールド |
説明 |
---|---|
unsigned int method_id |
一意なメソッド ID。メソッド ID は 999 以下にはできません。API 関数iJIT_GetNewMethodIDAPI 関数を使用して有効なメソッド ID を取得するか、独自の ID で一意性と適切な範囲を管理します。 |
char *method_name |
メソッドの名前を指定します。オプションでクラス名をプレフィックスとして完全なシグネチャーを追加できます。この引数は NULL にできません。 |
void *method_load_address |
メソッドコードのベースアドレスを指定します。JIT メソッドでない場合 NULL になることがあります。 |
unsigned int method_size |
メソッドがインライン展開されている仮想アドレス。NULL の場合、イベントのデータは受け入れられません。 |
unsigned int line_number_size |
行番号テーブルのエントリー数。0 はエントリーなしを示します。 |
pLineNumberInfo line_number_table |
行番号情報配列へのポインター。line_number_size が 0 の場合 NULL にできます。行番号情報配列の単一エントリーの説明については、LineNumberInfo構造体を参照してください。 |
char *class_file_name |
クラス名。NULL にできます。 |
char *source_file_name |
ソースファイル名。NULL にできます。 |
char *module_name |
モジュール名。NULL にできます。モジュール名は異なる JIT エンジンを区別するのに役立ちます。インテル® VTune™ プロファイラーは、モジュールごとにグループ化されたレポート済みのメソッドを表示します。 |
LineNumberInfo 構造
レポートを生成するには、コマンドラインで LineNumberInfo 構造体を使用して、コード領域の行番号情報に単一のエントリーを作成します。行番号エントリーの表は、レポートされたコード領域のソースコードへのマップを示す情報を提供します。インテル® VTune™ プロファイラーは、行番号情報を使用してサンプル (仮想アドレス) を行番号に対応付けます。同じソース行に対し異なるコードアドレスがレポートされることがあります。
オフセット |
行番号 |
1 |
2 |
12 |
4 |
15 |
2 |
18 |
1 |
21 |
30 |
インテル® VTune™ プロファイラーは、クライアント・データを使用して次の表を構成します。
コード範囲 |
行番号 |
0-1 |
2 |
1-12 |
4 |
12-15 |
2 |
15-18 |
1 |
18-21 |
30 |
LineNumberInfo 構造体には次のフィールドが含まれます。
フィールド |
説明 |
---|---|
unsigned int Offset |
メソッドの先頭からの Opcode バイトオフセット。 |
unsigned int LineNumber |
一致するソース行番号のオフセット (ソースファイルの先頭から) |
戻り値は、特定の iJIT_JVM_EVENT に依存します。