Top


定義場所(file name)

hotspot/src/share/vm/oops/instanceKlass.cpp

説明(description)

/* jni_id_for_impl for jfieldIds only */

名前(function name)

JNIid* instanceKlass::jni_id_for_impl(instanceKlassHandle this_oop, int offset) {

本体部(body)

  {- -------------------------------------------
  (1) JfieldIdCreation_lock のロックを取った状態で
      もう一度 JNIid::find() を呼び出し, 
      offset 引数で指定された値に対応する JNIid オブジェクトが
      既にこの instanceKlass の jni_ids フィールドに存在しないかどうか探してみる.

      もしそういう JNIid オブジェクトが見つかれば, それをリターンするだけ.

      見つからなければ, 
      対応する JNIid オブジェクト作成し, jni_ids フィールドにあるリストの先頭に追加した後, 
      リターンする.
      ---------------------------------------- -}

      MutexLocker ml(JfieldIdCreation_lock);
      // Retry lookup after we got the lock
      JNIid* probe = this_oop->jni_ids() == NULL ? NULL : this_oop->jni_ids()->find(offset);
      if (probe == NULL) {
        // Slow case, allocate new static field identifier
        probe = new JNIid(this_oop->as_klassOop(), offset, this_oop->jni_ids());
        this_oop->set_jni_ids(probe);
      }
      return probe;
    }

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