hotspot/src/share/vm/oops/klass.cpp
klassOop Klass::base_create_klass_oop(KlassHandle& klass, int size,
const Klass_vtbl& vtbl, TRAPS) {
{- -------------------------------------------
(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.