Top


定義場所(file name)

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

名前(function name)

void
JvmtiEnvBase::record_first_time_class_file_load_hook_enabled() {

本体部(body)

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(Threads::number_of_threads() == 0 || JvmtiThreadState_lock->is_locked(),
             "sanity check");

  {- -------------------------------------------
  (1) もし一度も class_file_load_hook が enabled になったことがなければ,
      can_retransform_classes が既に取得されていたかどうかをチェックする.
      取得されていなければ, get_prohibited_capabilities に can_retransform_classes が追加される
      (= これ以降 retransform capability は取得できなくなる)

      (これは, 「retransform capability を取得する場合は 
       ClassFileLoadHook が有効化されるまでに取得しないといけない」という 
       JVMTI 仕様上の制約のための処理.)
      ---------------------------------------- -}

      if (!_class_file_load_hook_ever_enabled) {
        _class_file_load_hook_ever_enabled = true;

        if (get_capabilities()->can_retransform_classes) {
          _is_retransformable = true;
        } else {
          _is_retransformable = false;

          // cannot add retransform capability after ClassFileLoadHook has been enabled
          get_prohibited_capabilities()->can_retransform_classes = 1;
        }
      }
    }

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