Top


定義場所(file name)

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

名前(function name)

_JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) {

本体部(body)

  {- -------------------------------------------
  (1) (DTrace のフック点)
      ---------------------------------------- -}

      HS_DTRACE_PROBE1(hotspot_jni, GetDefaultJavaVMInitArgs__entry, args_);

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

      JDK1_1InitArgs *args = (JDK1_1InitArgs *)args_;
      jint ret = JNI_ERR;

  {- -------------------------------------------
  (1) (DTrace のフック点)(リターン用) (See: DT_RETURN_MARK)
      ---------------------------------------- -}

      DT_RETURN_MARK(GetDefaultJavaVMInitArgs, jint, (const jint&)ret);

  {- -------------------------------------------
  (1) 返値は, Threads::is_supported_jni_version() が true を返せば JNI_OK, そうでなければ JNI_ERR とする.
      ---------------------------------------- -}

      if (Threads::is_supported_jni_version(args->version)) {
        ret = JNI_OK;
      }

  {- -------------------------------------------
  (1) なお, 指定されたバージョンが 1.1(HotSpot はもうサポートしない) の場合には, 
      引数の JDK1_1InitArgs 内に以下の情報を書き込んで launcher に伝えている.
      * バージョンについては, 最も近いサポート対象バージョンである 1.2 を書き込む.
      * javaStackSize についても, デフォルトのスタックサイズを書き込む.
      ---------------------------------------- -}

      // 1.1 style no longer supported in hotspot.
      // According the JNI spec, we should update args->version on return.
      // We also use the structure to communicate with launcher about default
      // stack size.
      if (args->version == JNI_VERSION_1_1) {
        args->version = JNI_VERSION_1_2;
        // javaStackSize is int in arguments structure
        assert(jlong(ThreadStackSize) * K < INT_MAX, "integer overflow");
        args->javaStackSize = (jint)(ThreadStackSize * K);
      }

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

      return ret;
    }

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