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变量。
本文解析了SystemDictionary的概念及其内部实现机制,介绍了它如何通过Hash表来保存已加载的class信息,并详细说明了其缓存最常用系统class的方式。
531

被折叠的 条评论
为什么被折叠?



