Top


定義場所(file name)

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

説明(description)

// post a DYNAMIC_CODE_GENERATED event for a given environment
// used by GenerateEvents

名前(function name)

void JvmtiExport::post_dynamic_code_generated(JvmtiEnv* env, const char *name,
                                              const void *code_begin, const void *code_end)
{

本体部(body)

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

      JavaThread* thread = JavaThread::current();

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

      EVT_TRIG_TRACE(JVMTI_EVENT_DYNAMIC_CODE_GENERATED,
                     ("JVMTI [%s] dynamic code generated event triggered (by GenerateEvents)",
                      JvmtiTrace::safe_get_thread_name(thread)));

  {- -------------------------------------------
  (1) (env 引数で指定された JvmtiEnv で
       JVMTI_EVENT_DYNAMIC_CODE_GENERATED イベントが有効になっていない場合は, 
       何もせずに終了)
      ---------------------------------------- -}

      if (env->is_enabled(JVMTI_EVENT_DYNAMIC_CODE_GENERATED)) {

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

        EVT_TRACE(JVMTI_EVENT_DYNAMIC_CODE_GENERATED,
                  ("JVMTI [%s] dynamic code generated event sent for %s",
                   JvmtiTrace::safe_get_thread_name(thread), name));

  {- -------------------------------------------
  (1) コールバック関数が設定されていれば, コールバック関数を呼び出す.
      (設定されていなければ, 何もしない)
      ---------------------------------------- -}

        JvmtiEventMark jem(thread);
        JvmtiJavaThreadEventTransition jet(thread);
        jint length = (jint)pointer_delta(code_end, code_begin, sizeof(char));
        jvmtiEventDynamicCodeGenerated callback = env->callbacks()->DynamicCodeGenerated;
        if (callback != NULL) {
          (*callback)(env->jvmti_external(), name, (void*)code_begin, length);
        }
      }
    }

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