これらは, JVMTI の機能を実装するために使われているクラス.
(なお, このうちの多くは JVMTI のイベント通知機能を実装するためのクラス (See: here for details))
JVMTI 関係の関数を納めた名前空間(AllStatic クラス).
このクラスは, HotSpot の JVMTI 関係の部分を HotSpot のそれ以外の部分から隠蔽する役割を果たしている (HotSpot 内の他のコードからは, このクラスを介して JVMTI の機能にアクセスする) (といっても, その他の部分から JVMTI に働きかけるのは主にイベント通知時ぐらいだが...) (See: here and here for details).
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// This class contains the JVMTI interface for the rest of hotspot.
//
class JvmtiExport : public AllStatic {
JVMTI 関連の様々な処理で使用されている (#TODO).
内部には, JVMTI 処理のための以下のようなメソッドが定義されている.
(例: JVMTI のバージョンを確認するメソッド, JVMTI environment を取得するためのメソッド)
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
static bool is_jvmti_version(jint version) { return (version & JVMTI_VERSION_MASK) == JVMTI_VERSION_VALUE; }
static bool is_jvmdi_version(jint version) { return (version & JVMTI_VERSION_MASK) == JVMDI_VERSION_VALUE; }
static jint get_jvmti_interface(JavaVM *jvm, void **penv, jint version);
(例: JVMTI agent が各種の capability を取得しているかどうかを設定/取得するメソッド) (なお, JvmtiExport::set_can_() メソッド及び JvmtiExport::can_() メソッドは, 以下のように JVMTI_SUPPORT_FLAG というマクロを使って間接的に定義されている(後述))
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
JVMTI_SUPPORT_FLAG(can_get_source_debug_extension)
JVMTI_SUPPORT_FLAG(can_maintain_original_method_order)
JVMTI_SUPPORT_FLAG(can_post_interpreter_events)
JVMTI_SUPPORT_FLAG(can_post_on_exceptions)
JVMTI_SUPPORT_FLAG(can_post_breakpoint)
JVMTI_SUPPORT_FLAG(can_post_field_access)
JVMTI_SUPPORT_FLAG(can_post_field_modification)
JVMTI_SUPPORT_FLAG(can_post_method_entry)
JVMTI_SUPPORT_FLAG(can_post_method_exit)
JVMTI_SUPPORT_FLAG(can_pop_frame)
JVMTI_SUPPORT_FLAG(can_force_early_return)
(例: JVMTI の各イベントを通知する必要があるかどうかを設定/取得するメソッド) (なお, JvmtiExport::set_should_post_() メソッド及び JvmtiExport::should_post_() メソッドは, 以下のように JVMTI_SUPPORT_FLAG というマクロを使って間接的に定義されている(後述))
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
JVMTI_SUPPORT_FLAG(should_post_single_step)
JVMTI_SUPPORT_FLAG(should_post_field_access)
JVMTI_SUPPORT_FLAG(should_post_field_modification)
JVMTI_SUPPORT_FLAG(should_post_class_load)
JVMTI_SUPPORT_FLAG(should_post_class_prepare)
JVMTI_SUPPORT_FLAG(should_post_class_unload)
JVMTI_SUPPORT_FLAG(should_post_native_method_bind)
JVMTI_SUPPORT_FLAG(should_post_compiled_method_load)
JVMTI_SUPPORT_FLAG(should_post_compiled_method_unload)
JVMTI_SUPPORT_FLAG(should_post_dynamic_code_generated)
JVMTI_SUPPORT_FLAG(should_post_monitor_contended_enter)
JVMTI_SUPPORT_FLAG(should_post_monitor_contended_entered)
JVMTI_SUPPORT_FLAG(should_post_monitor_wait)
JVMTI_SUPPORT_FLAG(should_post_monitor_waited)
JVMTI_SUPPORT_FLAG(should_post_data_dump)
JVMTI_SUPPORT_FLAG(should_post_garbage_collection_start)
JVMTI_SUPPORT_FLAG(should_post_garbage_collection_finish)
JVMTI_SUPPORT_FLAG(should_post_on_exceptions)
// ------ the below maybe don't have to be (but are for now)
// fixed conditions here ------------
// any events can be enabled
JVMTI_SUPPORT_FLAG(should_post_thread_life)
JVMTI_SUPPORT_FLAG(should_post_object_free)
JVMTI_SUPPORT_FLAG(should_post_resource_exhausted)
// we are holding objects on the heap - need to talk to GC - e.g.
// breakpoint info
JVMTI_SUPPORT_FLAG(should_clean_up_heap_objects)
JVMTI_SUPPORT_FLAG(should_post_vm_object_alloc)
(例: JVMTI の各種イベントの通知を行うメソッド (JvmtiExport::post_() メソッド)) (JvmtiExport::should_() で調べて JvmtiExport::post_*(), というパターンが基本)
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
static void post_field_modification(JavaThread *thread, methodOop method, address location,
KlassHandle field_klass, Handle object, jfieldID field,
char sig_type, jvalue *value);
// posts a DynamicCodeGenerated event (internal/private implementation).
// The public post_dynamic_code_generated* functions make use of the
// internal implementation. Also called from JvmtiDeferredEvent::post()
static void post_dynamic_code_generated_internal(const char *name, const void *code_begin, const void *code_end) KERNEL_RETURN;
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// Methods that notify the debugger that something interesting has happened in the VM.
static void post_vm_start ();
static void post_vm_initialized ();
static void post_vm_death ();
static void post_single_step (JavaThread *thread, methodOop method, address location) KERNEL_RETURN;
static void post_raw_breakpoint (JavaThread *thread, methodOop method, address location) KERNEL_RETURN;
static void post_exception_throw (JavaThread *thread, methodOop method, address location, oop exception) KERNEL_RETURN;
static void notice_unwind_due_to_exception (JavaThread *thread, methodOop method, address location, oop exception, bool in_handler_frame) KERNEL_RETURN;
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
static void post_method_entry (JavaThread *thread, methodOop method, frame current_frame) KERNEL_RETURN;
static void post_method_exit (JavaThread *thread, methodOop method, frame current_frame) KERNEL_RETURN;
static void post_class_load (JavaThread *thread, klassOop klass) KERNEL_RETURN;
static void post_class_unload (klassOop klass) KERNEL_RETURN;
static void post_class_prepare (JavaThread *thread, klassOop klass) KERNEL_RETURN;
static void post_thread_start (JavaThread *thread) KERNEL_RETURN;
static void post_thread_end (JavaThread *thread) KERNEL_RETURN;
JVMTI_SUPPORT_FLAG マクロは以下のように定義されている (フィールド, 及びそのフィールドに対するアクセサメソッドをまとめて定義する).
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
#ifndef JVMTI_KERNEL
#define JVMTI_SUPPORT_FLAG(key) \
private: \
static bool _##key; \
public: \
inline static void set_##key(bool on) { _##key = (on != 0); } \
inline static bool key() { return _##key; }
#else // JVMTI_KERNEL
#define JVMTI_SUPPORT_FLAG(key) \
private: \
const static bool _##key = false; \
public: \
inline static void set_##key(bool on) { report_unsupported(on); } \
inline static bool key() { return _##key; }
#endif // JVMTI_KERNEL
See: here for details
JVMTI 関係の処理で使用されているユーティリティ・クラス.
処理対象の CodeBlob の情報(名前およびコードのアドレス)を格納しておくためのクラス (See: here and here for details).
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// Support class used by JvmtiDynamicCodeEventCollector and others. It
// describes a single code blob by name and address range.
class JvmtiCodeBlobDesc : public CHeapObj {
以下の箇所に(のみ)格納されている.
以下の箇所で(のみ)生成されている.
(See: here for details)
(See: here for details)
(See: here for details)
内部には以下のフィールド(のみ)を含む (そして, メソッドはこれらのフィールドへの getter メソッド(アクセサメソッド)のみ)
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
char _name[64];
address _code_begin;
address _code_end;
See: here for details
JVMTI のイベント通知機能を実装するためのクラス (の基底クラス).
より具体的に言うと, 「ソースコード中のあるスコープの間だけはイベントの通知処理をすぐに行わずに溜めておき, 後でまとめて行いたい」という場面で使用される補助クラス(StackObjクラス).
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// JvmtiEventCollector is a helper class to setup thread for
// event collection.
class JvmtiEventCollector : public StackObj {
See: here for details
JvmtiEventCollector クラスの具象サブクラスの1つ. このクラスは DynamicCodeGenerated イベントの通知処理に使用される (See: here for details).
このクラスは JvmtiExport::post_dynamic_code_generated_while_holding_locks() メソッドと合わせて使用する (通常時には DynamicCodeGenerated イベントの通知は JvmtiExport::post_dynamic_code_generated() メソッドで行うが, このメソッドはロックを持っている間は呼び出せない. 一方, JvmtiExport::post_dynamic_code_generated_while_holding_locks() メソッドは, ロックを持っている間でも呼び出すことが出来る. といってもロック保持中に通知するわけではなく, イベントは一時的に JvmtiDynamicCodeEventCollector オブジェクト内に溜められる. そして, その JvmtiDynamicCodeEventCollector オブジェクトが(スコープを抜けて)死ぬときに, 溜めていたイベントが JvmtiExport::post_dynamic_code_generated() で通知される.)
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// A JvmtiDynamicCodeEventCollector is a helper class for the JvmtiExport
// interface. It collects "dynamic code generated" events that are posted
// while holding locks. When the event collector goes out of scope the
// events will be posted.
//
// Usage :-
//
// {
// JvmtiDynamicCodeEventCollector event_collector;
// :
// { MutexLocker ml(...)
// :
// JvmtiExport::post_dynamic_code_generated_while_holding_locks(...)
// }
// // event collector goes out of scope => post events to profiler.
// }
class JvmtiDynamicCodeEventCollector : public JvmtiEventCollector {
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// similiar to post_dynamic_code_generated except that it can be used to
// post a DynamicCodeGenerated event while holding locks in the VM. Any event
// posted using this function is recorded by the enclosing event collector
// -- JvmtiDynamicCodeEventCollector.
static void post_dynamic_code_generated_while_holding_locks(const char* name, address code_begin, address code_end) KERNEL_RETURN;
コード中で JvmtiDynamicCodeEventCollector 型の局所変数を宣言するだけ.
各 JvmtiThreadState オブジェクトの _dynamic_code_event_collector フィールドに(のみ)格納されている.
(正確には, このフィールドは JvmtiDynamicCodeEventCollector の線形リストを格納するフィールド. JvmtiDynamicCodeEventCollector オブジェクトは _prev フィールドで次の JvmtiDynamicCodeEventCollector オブジェクトを指せる構造になっている. その JvmtiThreadState オブジェクト内で生成した JvmtiDynamicCodeEventCollector オブジェクトは全てこのフィールドの線形リストに格納されている)
SharedRuntime::handle_ic_miss_helper() 内で(のみ)使用されている
(正確には SharedRuntime::handle_ic_miss_helper() の中で JvmtiDynamicCodeEventCollector 型の局所変数が宣言され, その後ここから呼び出される処理の中でイベント通知情報が蓄えられる).
See: here for details
JvmtiEventCollector クラスの具象サブクラスの1つ. このクラスは VMObjectAlloc イベントの通知処理に使用される (See: here for details).
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// Used to record vm internally allocated object oops and post
// vm object alloc event for objects visible to java world.
// Constructor enables JvmtiThreadState flag and all vm allocated
// objects are recorded in a growable array. When destructor is
// called the vm object alloc event is posted for each objects
// visible to java world.
// See jvm.cpp file for its usage.
//
class JvmtiVMObjectAllocEventCollector : public JvmtiEventCollector {
コード中で JvmtiVMObjectAllocEventCollector 型の局所変数を宣言するだけ.
各 JvmtiThreadState オブジェクトの _vm_object_alloc_event_collector フィールドに(のみ)格納されている.
(正確には, このフィールドは JvmtiVMObjectAllocEventCollector の線形リストを格納するフィールド. JvmtiVMObjectAllocEventCollector オブジェクトは _prev フィールドで次の JvmtiVMObjectAllocEventCollector オブジェクトを指せる構造になっている. その JvmtiThreadState オブジェクト内で生成した JvmtiVMObjectAllocEventCollector オブジェクトは全てこのフィールドの線形リストに格納されている)
メモリを確保する可能性がある各種の CVMI 関数内で(のみ)使用されている
(正確にはそれらの関数中で JvmtiVMObjectAllocEventCollector 型の局所変数が宣言され, その後そこから呼び出される処理の中でイベント通知情報が蓄えられる).
See: here for details
?? (このクラスは使用箇所が見当たらない...)
(ソースコード中のあるスコープの間だけ, VMObjectAlloc イベントの通知処理を無効にするクラスのようだが... #TODO)
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// Marker class to disable the posting of VMObjectAlloc events
// within its scope.
//
// Usage :-
//
// {
// NoJvmtiVMObjectAllocMark njm;
// :
// // VMObjAlloc event will not be posted
// JvmtiExport::vm_object_alloc_event_collector(obj);
// :
// }
class NoJvmtiVMObjectAllocMark : public StackObj {
See: here for details
保守運用機能のためのクラス (JVMTI 用のフック点を管理するためのクラス).
JVMTI のフック点の生成処理を簡単に行うための補助クラス(StackObjクラス). ソースコード上のスコープに連動して自動的にフック点を生成する (See: here and here for details).
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// Base class for reporting GC events to JVMTI.
class JvmtiGCMarker : public StackObj {
各 SvcGCMarker オブジェクトの _jgcm フィールドに(のみ)格納されている (See: SvcGCMarker).
(SvcGCMarker クラスの _jgcm フィールドは, ポインタ型ではなく実体なので, SvcGCMarker オブジェクトの生成時に一緒に生成される)
コンストラクタで JvmtiExport::post_garbage_collection_start() を呼び出し, デストラクタで JvmtiExport::post_garbage_collection_finish() を呼び出す (これらは JVMTI のフック点).
(なお, コンストラクタで JvmtiEnvBase::check_for_periodic_clean_up() を呼び出し, 不要になった JvmtiEnvBase や JvmtiEnvThreadState を削除する役割も担っている.)
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
JvmtiGCMarker::JvmtiGCMarker() {
// if there aren't any JVMTI environments then nothing to do
if (!JvmtiEnv::environments_might_exist()) {
return;
}
if (JvmtiExport::should_post_garbage_collection_start()) {
JvmtiExport::post_garbage_collection_start();
}
if (SafepointSynchronize::is_at_safepoint()) {
// Do clean up tasks that need to be done at a safepoint
JvmtiEnvBase::check_for_periodic_clean_up();
}
}
JvmtiGCMarker::~JvmtiGCMarker() {
// if there aren't any JVMTI environments then nothing to do
if (!JvmtiEnv::environments_might_exist()) {
return;
}
// JVMTI notify gc finish
if (JvmtiExport::should_post_garbage_collection_finish()) {
JvmtiExport::post_garbage_collection_finish();
}
}
See: here for details
JVMTI のイベント通知機能を実装するためのクラス. より具体的に言うと, SingleStep イベントの処理内で使用される補助クラス (See: here for details).
ソースコード中のあるスコープの間だけは SingleStep イベントの通知を無効にしておきたい, という場面で使用される補助クラス(StackObjクラス). (主に, ダイナミックロードが走る可能性がある場合で, そのままだとクラスローダの処理まで SingleStep 実行されてしまうので一時的に SingleStep を無効にする, という用途で使われている模様)
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
// JvmtiHideSingleStepping is a helper class for hiding
// internal single step events.
class JvmtiHideSingleStepping : public StackObj {
以下の箇所で(のみ)使用されている.
コンストラクタで JvmtiExport::hide_single_stepping() を呼んで SingleStep イベントを無効にし, デストラクタで JvmtiExport::expose_single_stepping() を呼んで元に戻している.
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
JvmtiHideSingleStepping(JavaThread * thread) {
assert(thread != NULL, "sanity check");
_single_step_hidden = false;
_thread = thread;
if (JvmtiExport::should_post_single_step()) {
_single_step_hidden = JvmtiExport::hide_single_stepping(_thread);
}
}
~JvmtiHideSingleStepping() {
if (_single_step_hidden) {
JvmtiExport::expose_single_stepping(_thread);
}
}
JvmtiHideSingleStepping の効果は累積する (JvmtiHideSingleStepping が複数使用された場合, 全ての JvmtiHideSingleStepping のデストラクタが呼ばれるまで SingleStep イベントは有効状態に戻らない).
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
保守運用機能のためのクラス (JVMTI 機能及び Dynamic Attach 機能用のクラス). より具体的に言うと, JVMTI のイベント通知処理(コールバック呼び出し処理) や Dynamic Attach の Agent_OnAttach() 関数の呼び出し処理の記述を簡単に行うための補助クラス(StackObjクラス).
具体的には, 以下の機能を提供する.
(コールバック関数や Agent_OnAttach() はネイティブ関数なので, 呼び出し中は _thread_in_native にしておかないと Safepoint が始まらない).
呼び出し処理で確保された ResourceObj を自動的に開放する
呼び出し処理で確保された Handle を自動的に開放する
なお, このクラスは _thread_in_vm 状態にある JavaThread 用. それ以外の場合用には JvmtiThreadEventTransition が用意されている (See: JvmtiThreadEventTransition).
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
///////////////////////////////////////////////////////////////
//
// JvmtiEventTransition
//
// TO DO --
// more handle purging
// Use this for JavaThreads and state is _thread_in_vm.
class JvmtiJavaThreadEventTransition : StackObj {
以下の箇所で(のみ)使用されている (See: here and here for details).
実体としては, 単なる ResourceMark & ThreadToNativeFromVM & HandleMark のラッパー (See: ResourceMark, ThreadToNativeFromVM, HandleMark).
See: here for details
特殊な JvmtiJavaThreadEventTransition クラス (See: JvmtiJavaThreadEventTransition).
このクラスは, _thread_in_vm 状態ではない JavaThread や JavaThread 以外のスレッド用.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
// For JavaThreads which are not in _thread_in_vm state
// and other system threads use this.
class JvmtiThreadEventTransition : StackObj {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
JVMTI のイベント通知機能を実装するためのクラス. より具体的に言うと, 実際のイベント通知処理(コールバック呼び出し処理)の記述を簡単に行うための補助クラス(StackObjクラス).
具体的には, 以下のような機能を提供する.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
///////////////////////////////////////////////////////////////
//
// JvmtiEventMark
//
class JvmtiEventMark : public StackObj {
以下の箇所で(のみ)使用されている (See: here for details).
コンストラクタで JNIHandleBlock の確保と JvmtiThreadState の状態の待避を行い, デストラクタで JNIHandleBlock や JvmtiThreadState の状態を元に戻している.
また, 引数を JNI Handle 化するための補助関数も提供している (この補助関数はサブクラス内で使用されている).
(なお, 本当は #if 0 の中のように書きたかったけど今のところ上手く動かないのでとりあえずの実装にしている, とのこと)
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
#if 0
jobject to_jobject(oop obj) { return obj == NULL? NULL : _hblock->allocate_handle_fast(obj); }
#else
// we want to use the code above - but that needs the JNIHandle changes - later...
// for now, use regular make_local
jobject to_jobject(oop obj) { return JNIHandles::make_local(_thread,obj); }
#endif
See: here for details
See: here for details
See: here for details
JvmtiEventMark クラスのサブクラス.
JvmtiEventMark が JNI Handle 化して保護する範囲に加えて, jthread 型の値を1つ保護対象に加えている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiThreadEventMark : public JvmtiEventMark {
以下の箇所で(のみ)使用されている (See: here and here for details).
See: here for details
JvmtiThreadEventMark クラスのサブクラス.
JvmtiThreadEventMark が JNI Handle 化して保護する範囲に加えて, jclass 型の値を1つ保護対象に加えている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiClassEventMark : public JvmtiThreadEventMark {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
JvmtiThreadEventMark クラスのサブクラス.
JvmtiThreadEventMark が JNI Handle 化して保護する範囲に加えて, jmethodID 型の値を1つ保護対象に加えている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiMethodEventMark : public JvmtiThreadEventMark {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
JvmtiMethodEventMark クラスのサブクラス.
JvmtiMethodEventMark が JNI Handle 化して保護する範囲に加えて, jlocation 型の値を1つ保護対象に加えている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiLocationEventMark : public JvmtiMethodEventMark {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
JvmtiLocationEventMark クラスのサブクラス.
JvmtiLocationEventMark が JNI Handle 化して保護する範囲に加えて, jobject 型の値(例外オブジェクト)を1つ保護対象に加えている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiExceptionEventMark : public JvmtiLocationEventMark {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
JvmtiThreadEventMark クラスのサブクラス.
JvmtiThreadEventMark が JNI Handle 化して保護する範囲に加えて, クラスファイルのロードに関連するいくつかの値を保護対象に加えている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiClassFileLoadEventMark : public JvmtiThreadEventMark {
以下の箇所で(のみ)使用されている.
そして, この関数は現在は以下のパスで(のみ)呼び出されている (See: here for details).
JvmtiExport::post_class_file_load_hook() -> JvmtiClassFileLoadHookPoster::post() -> JvmtiClassFileLoadHookPoster::post_all_envs() -> JvmtiClassFileLoadHookPoster::post_to_env()
See: here for details
JVMTI のイベント通知機能を実装するための補助クラス(StackObjクラス). より具体的に言うと, ClassFileLoadHook イベントの通知処理を行うためのクラス (ClassFileLoadHook イベントの通知処理は, このクラスの JvmtiClassFileLoadHookPoster::post() メソッドに実装されている) (See: here for details).
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiClassFileLoadHookPoster : public StackObj {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
JvmtiClassEventMark クラスのサブクラス.
JvmtiClassEventMark が JNI Handle 化して保護する範囲に加えて, jobject 型の値(確保したオブジェクト)を1つ保護対象に加えている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiVMObjectAllocEventMark : public JvmtiClassEventMark {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
JvmtiMethodEventMark クラスのサブクラス.
JvmtiMethodEventMark が JNI Handle 化して保護する範囲に加えて, CompiledMethodLoad イベントに関する幾つかの情報を保持している.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiCompiledMethodLoadEventMark : public JvmtiMethodEventMark {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
JvmtiThreadEventMark クラスのサブクラス.
JvmtiThreadEventMark が JNI Handle 化して保護する範囲に加えて, jobject 型の値(ロック対象のオブジェクト)を1つ保護対象に加えている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.cpp))
class JvmtiMonitorEventMark : public JvmtiThreadEventMark {
以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.