Top


定義場所(file name)

hotspot/src/share/vm/prims/jvmtiExport.cpp

名前(function name)

void JvmtiExport::post_compiled_method_load(nmethod *nm) {

本体部(body)

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

      JavaThread* thread = JavaThread::current();

  {- -------------------------------------------
  (1) (トレース出力)
      ---------------------------------------- -}

      EVT_TRIG_TRACE(JVMTI_EVENT_COMPILED_METHOD_LOAD,
                     ("JVMTI [%s] method compile load event triggered",
                     JvmtiTrace::safe_get_thread_name(thread)));

  {- -------------------------------------------
  (1) (以下の for ループ内で全ての JvmtiEnv を辿り, 
       そのうちの JVMTI_EVENT_COMPILED_METHOD_LOAD イベントが有効になっているものについてハンドラの呼び出し処理を行う)
      ---------------------------------------- -}

      JvmtiEnvIterator it;
      for (JvmtiEnv* env = it.first(); env != NULL; env = it.next(env)) {
        if (env->is_enabled(JVMTI_EVENT_COMPILED_METHOD_LOAD)) {

    {- -------------------------------------------
  (1.1) (トレース出力)
        ---------------------------------------- -}

          EVT_TRACE(JVMTI_EVENT_COMPILED_METHOD_LOAD,
                    ("JVMTI [%s] class compile method load event sent %s.%s  ",
                    JvmtiTrace::safe_get_thread_name(thread),
                    (nm->method() == NULL) ? "NULL" : nm->method()->klass_name()->as_C_string(),
                    (nm->method() == NULL) ? "NULL" : nm->method()->name()->as_C_string()));

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

          ResourceMark rm(thread);
          HandleMark hm(thread);

    {- -------------------------------------------
  (1.1) JvmtiCompiledMethodLoadEventMark オブジェクトを生成して, ハンドラへの引数を計算させる.
        ---------------------------------------- -}

          // Add inlining information
          jvmtiCompiledMethodLoadInlineRecord* inlinerecord = create_inline_record(nm);
          // Pass inlining information through the void pointer
          JvmtiCompiledMethodLoadEventMark jem(thread, nm, inlinerecord);

    {- -------------------------------------------
  (1.1) ?? #TODO
        ---------------------------------------- -}

          JvmtiJavaThreadEventTransition jet(thread);

    {- -------------------------------------------
  (1.1) コールバック関数を取得し, それが NULL でなければ呼び出しを行う.
        (引数については JvmtiCompiledMethodLoadEventMark オブジェクトから取得したものを使用)
        ---------------------------------------- -}

          jvmtiEventCompiledMethodLoad callback = env->callbacks()->CompiledMethodLoad;
          if (callback != NULL) {
            (*callback)(env->jvmti_external(), jem.jni_methodID(),
                        jem.code_size(), jem.code_data(), jem.map_length(),
                        jem.map(), jem.compile_info());
          }
        }
      }
    }

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