Top


定義場所(file name)

hotspot/src/share/vm/classfile/verifier.cpp

名前(function name)

static void* verify_byte_codes_fn() {

本体部(body)

  {- -------------------------------------------
  (1) (この関数では, 初回の呼び出し時に
      結果を _verify_byte_codes_fn 大域変数にキャッシュしている.
      二度目以降は, キャッシュした結果を返す)
      ---------------------------------------- -}

  {- -------------------------------------------
  (1) まだキャッシュしていなければ (= 初回の呼び出し時であれば)
      libjava 内から VerifyClassCodesForMajorVersion() 関数を指すポインタを取得し, 
      _verify_byte_codes_fn 大域変数に設定する.

      もし, VerifyClassCodesForMajorVersion() が見つからなければ, 
      VerifyClassCodes() 関数を指すポインタを取得し, 
      _verify_byte_codes_fn 大域変数に設定する.

      (なお, どちらを設定したか分かるように, 
       VerifyClassCodes() の場合は _is_new_verify_byte_codes_fn 大域変数を false にする)
      ---------------------------------------- -}

      if (_verify_byte_codes_fn == NULL) {
        void *lib_handle = os::native_java_library();
        void *func = os::dll_lookup(lib_handle, "VerifyClassCodesForMajorVersion");
        OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func);
        if (func == NULL) {
          OrderAccess::release_store(&_is_new_verify_byte_codes_fn, false);
          func = os::dll_lookup(lib_handle, "VerifyClassCodes");
          OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func);
        }
      }

  {- -------------------------------------------
  (1) _verify_byte_codes_fn の値をリターン
      ---------------------------------------- -}

      return (void*)_verify_byte_codes_fn;
    }

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