Up Top

Serviceability 機能 : JVMTI の処理 : JVMTI 関数の処理 : イベント管理 (Event Management) : 各イベントの通知処理 : DynamicCodeGenerated イベントの処理


概要(Summary)

DynamicCodeGenerated イベントには通常の処理パスと GenerateEvents() によるパスの2通りがある.

(なお, 通常の処理パスと GenerateEvents() によるパスで呼び出されるメソッドは, メソッド名はどちらも JvmtiExport::post_dynamic_code_generated() だが, 引数が異なる(オーバーロード)ので注意)

通常の処理パスではイベントは全て遅延通知される (See: here for details).

なお, 通常の処理パスの中には JvmtiDynamicCodeEventCollector オブジェクトを用いたパスも存在する. この場合も遅延通知になる点は同様だが, まず通知するイベントの情報を JvmtiDynamicCodeEventCollector オブジェクト内に溜めた後, JvmtiDynamicCodeEventCollector のデストラクタ内で遅延通知処理が行われる (See: JvmtiDynamicCodeEventCollector).

処理の流れ (概要)(Execution Flows : Summary)

JvmtiDynamicCodeEventCollector オブジェクト用の記録処理

(略) (See: here for details)
-> VtableStubs::create_vtable_stub()
   -> VtableStub::operator new()
      -> JvmtiExport::post_dynamic_code_generated_while_holding_locks()
         -> JvmtiDynamicCodeEventCollector::register_stub()

(略) (See: here for details)
-> VtableStubs::create_itable_stub()
   -> VtableStub::operator new()
      -> (同上)

通常の通知処理パス

(略) (See: )
-> interpreter_init()
   -> JvmtiExport::post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end)
      -> (略) (See: here for details)

(略) (See: )
-> JvmtiDynamicCodeEventCollector::~JvmtiDynamicCodeEventCollector()
   -> JvmtiExport::post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end)
      -> (略) (See: here for details)

(略) (See: )
-> AdapterHandlerLibrary::get_adapter()
   -> JvmtiExport::post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end)
      -> (略) (See: here for details)

(略) (See: )
-> CodeBlob::trace_new_stub()
   -> JvmtiExport::post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end)
      -> (略) (See: here for details)

(略) (See: )
-> StubCodeMark::~StubCodeMark()
   -> JvmtiExport::post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end)
      -> (略) (See: here for details)

(略) (See: )
-> SharkCompiler::generate_native_code()
   -> JvmtiExport::post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end)
      -> (略) (See: here for details)

GenerateEvents() による通知処理パス

(See: here for details)

処理の流れ (詳細)(Execution Flows : Details)

JvmtiDynamicCodeEventCollector::JvmtiDynamicCodeEventCollector()

(#Under Construction)

JvmtiEventCollector::setup_jvmti_thread_state()

See: here for details

JvmtiThreadState::set_dynamic_code_event_collector()

See: here for details

JvmtiExport::post_dynamic_code_generated_while_holding_locks()

See: here for details

JvmtiThreadState::get_dynamic_code_event_collector()

See: here for details

JvmtiDynamicCodeEventCollector::register_stub()

See: here for details

JvmtiDynamicCodeEventCollector::~JvmtiDynamicCodeEventCollector()

(#Under Construction)

JvmtiEventCollector::unset_jvmti_thread_state()

See: here for details


This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.