SystemDictionary正如它所暗示的那样,它是用来保存系统信息的一个字典,其实现基于Hash表。
它保存了系统已经加载了class信息。
下面是SystemDictionary保存class信息的变量。
static Dictionary* _dictionary;
它保存了系统已经加载了class信息。
下面是SystemDictionary保存class信息的变量。
static Dictionary* _dictionary;
static PlaceholderTable* _placeholders;
其中 _dictionary是存放已经加载的class的Hash表。
_placeholders是存放正在加载的class的Hash表。
_placeholders是存放正在加载的class的Hash表。
同时对于最常用的系统class,SystemDictionary又专门定义了变量,起到了cache的作用,
避免了每次使用都去_dictionary中查询。
例如: static klassOop _object_klass;
static klassOop _string_klass; 等等
避免了每次使用都去_dictionary中查询。
例如: static klassOop _object_klass;
static klassOop _string_klass; 等等
这些变量均在SystemDictionary::initialize中被初始化。
JNI_CreateJavaVM
|
|-->Threads::create_vm
|
|-->init_globals
|
|-->universe2_init
|
|-->Universe::genesis
|
|-->SystemDictionary::initialize
|
|-->SystemDictionary::initialize_preloaded_classes
其中SystemDictionary::initialize_preloaded_classes就是初始化SystemDictionary中最常用的系统class变量。