无名 发表于 2022-5-8 17:02:08

【LSP】类加载器


http://cdn.u1.huluxia.com/g4/M01/6B/18/rBAAdl93BWyAN5ADAACt4WdlvYs612.jpg
类加载器可以加载类,这些类被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()方法可以根据类名加载类,具体实现如下: http://cdn.u1.huluxia.com/g4/M01/6B/18/rBAAdl93BW2AOnPFAAHzzRELR_Y821.jpg
parseClassFile()方法就是解析Class文件中的类、字段、常量池等信息,然后转换为C++内部的对等表示,如类元信息存储在InstanceKlass实例中,常量池信息存储在ConstantPool中,部分的C++对等实现(类模型)在之前已经介绍过,这里不再介绍。后续会详细介绍parseClassFile()方法解析Class文件的过程。
页: [1]
查看完整版本: 【LSP】类加载器