hotspot/src/share/vm/runtime/thread.cpp
// Called for after the VM is initialized for -Xrun libraries which have not been converted to agent libraries
// Invokes JVM_OnLoad
void Threads::create_vm_init_libraries() {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
extern struct JavaVM_ main_vm;
AgentLibrary* agent;
{- -------------------------------------------
(1) 以下の for ループ内で
Arguments::libraries() に登録されている全ての AgentLibrary オブジェクトを辿り,
それぞれの JVM_OnLoad() メソッドを呼び出す.
(なお, JVM_OnLoad() メソッドが見つからなかった場合や
JVM_OnLoad() がエラーを返した場合は, vm_exit_during_initialization() で異常終了させる)
---------------------------------------- -}
for (agent = Arguments::libraries(); agent != NULL; agent = agent->next()) {
{- -------------------------------------------
(1.1) JVM_OnLoad() メソッドを探す
---------------------------------------- -}
OnLoadEntry_t on_load_entry = lookup_jvm_on_load(agent);
{- -------------------------------------------
(1.1) JVM_OnLoad() メソッドが見つかった場合は, それを呼び出す.
(なお, 呼び出しがエラーを返した場合は vm_exit_during_initialization() で異常終了させる)
---------------------------------------- -}
if (on_load_entry != NULL) {
// Invoke the JVM_OnLoad function
JavaThread* thread = JavaThread::current();
ThreadToNativeFromVM ttn(thread);
HandleMark hm(thread);
jint err = (*on_load_entry)(&main_vm, agent->options(), NULL);
if (err != JNI_OK) {
vm_exit_during_initialization("-Xrun library failed to init", agent->name());
}
{- -------------------------------------------
(1.1) JVM_OnLoad() メソッドが見つからなかった場合は,
vm_exit_during_initialization() で異常終了させる.
---------------------------------------- -}
} else {
vm_exit_during_initialization("Could not find JVM_OnLoad function in -Xrun library", agent->name());
}
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.