无名商城论坛

搜索
查看: 229|回复: 0

[其他技术] 【LSP】类加载器

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 17:02:08 | 显示全部楼层 |阅读模式


类加载器可以加载类,这些类被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文件的过程。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表