Top


定義場所(file name)

hotspot/src/share/vm/runtime/thread.cpp

説明(description)

// Called for after the VM is initialized for -Xrun libraries which have not been converted to agent libraries
// Invokes JVM_OnLoad

名前(function name)

void Threads::create_vm_init_libraries() {

本体部(body)

  {- -------------------------------------------
  (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.