Top


定義場所(file name)

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

説明(description)

// Create agents for -agentlib:  -agentpath:  and converted -Xrun
// Invokes Agent_OnLoad
// Called very early -- before JavaThreads exist

名前(function name)

void Threads::create_vm_init_agents() {

本体部(body)

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      extern struct JavaVM_ main_vm;
      AgentLibrary* agent;

  {- -------------------------------------------
  (1) (JVMTI の phase の変更)
      (ここからが JVMTI_PHASE_ONLOAD)
      ---------------------------------------- -}

      JvmtiExport::enter_onload_phase();

  {- -------------------------------------------
  (1) 以下の for ループ内で
      Arguments::agents() に登録されている全ての AgentLibrary オブジェクトを辿り, 
      それぞれの Agent_OnLoad() メソッドを呼び出す.

      (なお, Agent_OnLoad() メソッドが見つからなかった場合や
      Agent_OnLoad() がエラーを返した場合は, vm_exit_during_initialization() で異常終了させる)
      ---------------------------------------- -}

      for (agent = Arguments::agents(); agent != NULL; agent = agent->next()) {

    {- -------------------------------------------
  (1.1) Agent_OnLoad() メソッドを探す
        ---------------------------------------- -}

        OnLoadEntry_t  on_load_entry = lookup_agent_on_load(agent);

    {- -------------------------------------------
  (1.1) Agent_OnLoad() メソッドが見つかった場合は, それを呼び出す.
        (なお, 呼び出しがエラーを返した場合は vm_exit_during_initialization() で異常終了させる)
        ---------------------------------------- -}

        if (on_load_entry != NULL) {
          // Invoke the Agent_OnLoad function
          jint err = (*on_load_entry)(&main_vm, agent->options(), NULL);
          if (err != JNI_OK) {
            vm_exit_during_initialization("agent library failed to init", agent->name());
          }

    {- -------------------------------------------
  (1.1) Agent_OnLoad() メソッドが見つからなかった場合は,
        vm_exit_during_initialization() で異常終了させる.
        ---------------------------------------- -}

        } else {
          vm_exit_during_initialization("Could not find Agent_OnLoad function in the agent library", agent->name());
        }
      }

  {- -------------------------------------------
  (1) (JVMTI の phase の変更)
      (ここからが JVMTI_PHASE_PRIMORDIAL)
      ---------------------------------------- -}

      JvmtiExport::enter_primordial_phase();
    }

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