java.lang.Class のインスタンス(= Java のクラスオブジェクト = mirror オブジェクト)用の Klass クラス.
クラスオブジェクトはそれぞれ異なる個数の static フィールドを持つので (= サイズの計算や oop の iterate 処理をそれぞれ変える必要があるので), 特別扱いしている模様.
SystemDictionary クラスの well_known_klasses フィールド (static フィールド) に(のみ)格納されている (アクセサメソッドは SystemDictionary::Classklass()).
(正確には, このフィールドは klassOop の配列を格納するフィールド. 配列長は SystemDictionary::WKID_LIMIT)
(なお, このオブジェクトは各 mirror オブジェクトの klass フィールドからも参照されている)
instanceMirrorKlass オブジェクトの生成処理, 及び SystemDictionary::well_known_klasses フィールドへの登録処理は, SystemDictionary::initializepreloaded_classes() 内で行われている.
(より正確に言うと, 実際の生成処理自体はそこから呼び出される instanceKlassKlass::allocate_instance_klass() 内で行われる. なお, この関数では instanceMirrorKlass オブジェクトではなく instanceKlass オブジェクトや instanceRefKlass オブジェクトが生成されることもある. instanceMirrorKlass オブジェクトは, クラス名が java.lang.Class である場合にのみ生成される.)
(HotSpot の起動時処理) (See: here for details) -> Threads::create_vm() -> init_globals() -> universe2_init() -> Universe::genesis() -> SystemDictionary::initialize() -> SystemDictionary::initialize_preloaded_classes() -> SystemDictionary::initialize_wk_klasses_through() -> SystemDictionary::initialize_wk_klasses_until() -> SystemDictionary::initialize_wk_klass() -> SystemDictionary::resolve_or_fail() -> (See: here for details)
クラスオブジェクトは static フィールドの数が不定なため, instanceMirrorKlass::oop_oop_iterate() 等の処理では 実行時に java_lang_Class::static_oop_field_count() で oop 数を取得している.
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.