Top


定義場所(file name)

hotspot/src/share/vm/oops/klass.hpp

説明(description)

この関数は DEFINE_ALLOCATE_PERMANENT() マクロによって生成される. マクロの thisKlass 引数が, 実際の Klass サブクラスに置換される.

  // Every subclass on which vtbl_value is called must include this macro.
  // Delay the installation of the klassKlass pointer until after the
  // the vtable for a new klass has been installed (after the call to new()).
#define DEFINE_ALLOCATE_PERMANENT(thisKlass)                                  \

名前(function name)

  void* allocate_permanent(KlassHandle& klass_klass, int size, TRAPS) const { \

本体部(body)

  {- -------------------------------------------
  (1) 新しい Klass クラス (の各サブクラス) のオブジェクトを確保する
      ---------------------------------------- -}

        void* result = new(klass_klass, size, THREAD) thisKlass();                \
        if (HAS_PENDING_EXCEPTION) return NULL;                                   \

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

        klassOop new_klass = ((Klass*) result)->as_klassOop();                    \

  {- -------------------------------------------
  (1) Klass_vtbl::post_new_init_klass() を呼んで, 
      確保した Klass オブジェクトに対応する klassOop の klass フィールドを初期化する.
      (なお, klass フィールドの初期化が最後になるようメモリバリアも張っている)
      ---------------------------------------- -}

        OrderAccess::storestore();                                                \
        post_new_init_klass(klass_klass, new_klass, size);                        \

  {- -------------------------------------------
  (1) 結果をリターン
      ---------------------------------------- -}

        return result;                                                            \
      }

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