|
类加载器可以加载类,这些类被HotSpot加载后,都以Klass对象表示。涉及到的主要的类加载器有启动类加载器/引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用类加载器/系统类加载器(Application ClassLoader)。
1、引导类加载器/启动类加载器
引导类加载器由ClassLoader类实现,这个ClassLoader类是用C++语言来实现的,它负责将 <JAVA_HOME>/lib目录、 -Xbootclasspath选项指定的目录或系统属性sun.boot.class.path指定的目录下的核心类库加载到内存中。
用C++语言定义的类加载器及重要的函数如下:
class ClassLoader::AllStatic {
private:
...
// 加载类
static instanceKlassHandle load_classfile(Symbol* h_name,TRAPS);
// 设置加载路径
static void setup_bootstrap_search_path();
public:
// 初始化类加载器
static void initialize();
...
}
load_classfile()方法可以根据类名加载类,具体实现如下:
parseClassFile()方法就是解析Class文件中的类、字段、常量池等信息,然后转换为C++内部的对等表示,如类元信息存储在InstanceKlass实例中,常量池信息存储在ConstantPool中,部分的C++对等实现(类模型)在之前已经介绍过,这里不再介绍。后续会详细介绍parseClassFile()方法解析Class文件的过程。 |
|