Top


定義場所(file name)

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

名前(function name)

klassOop Klass::base_create_klass_oop(KlassHandle& klass, int size,
                                      const Klass_vtbl& vtbl, TRAPS) {

本体部(body)

  {- -------------------------------------------
  (1) 引数の調整
      ---------------------------------------- -}

      size = align_object_size(size);

  {- -------------------------------------------
  (1) Klass_vtbl::allocate_permanent() (を各サブクラスがオーバーライドしたもの) を呼んで, 
      Klass オブジェクトを確保する.
      ---------------------------------------- -}

      // allocate and initialize vtable
      Klass*   kl = (Klass*) vtbl.allocate_permanent(klass, size, CHECK_NULL);

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

      klassOop k  = kl->as_klassOop();

  {- -------------------------------------------
  (1) 作成した Klass オブジェクトのフィールドを初期化(#TODO).
      ---------------------------------------- -}

      { // Preinitialize supertype information.
        // A later call to initialize_supers() may update these settings:
        kl->set_super(NULL);
        for (juint i = 0; i < Klass::primary_super_limit(); i++) {
          kl->_primary_supers[i] = NULL;
        }
        kl->set_secondary_supers(NULL);
        oop_store_without_check((oop*) &kl->_primary_supers[0], k);
        kl->set_super_check_offset(primary_supers_offset_in_bytes() + sizeof(oopDesc));
      }

  {- -------------------------------------------
  (1) 作成した Klass オブジェクトのフィールドを初期化する.
      ---------------------------------------- -}

      kl->set_java_mirror(NULL);
      kl->set_modifier_flags(0);
      kl->set_layout_helper(Klass::_lh_neutral_value);
      kl->set_name(NULL);
      AccessFlags af;
      af.set_flags(0);
      kl->set_access_flags(af);
      kl->set_subklass(NULL);
      kl->set_next_sibling(NULL);
      kl->set_alloc_count(0);
      kl->set_alloc_size(0);

      kl->set_prototype_header(markOopDesc::prototype());
      kl->set_biased_lock_revocation_count(0);
      kl->set_last_biased_lock_bulk_revocation_time(0);

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

      return k;
    }

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