JVM类加载机制
一、基础知识
类的加载过程可以分为如下三类:
1.1 加载
将字节码从不同的数据源读取到JVM中,比如从class文件、jar文件甚至是网络中,将字节流加载进来形成Class类;
1.2 链接
简单的说,就是将上一步加载进来的类进行一些预处理,主要包含三个步骤:
-
验证
验证Class类中的信息是否满足JVM的规范和约束要求,防止字节码注入、非标编译等操作,从而影响JVM的运行。这个过程会触发其它Class的加载操作。
-
准备
开始创建Class类中的静态变量,给它们分配存储空间。
-
解析
将符号引用替换为实际引用。
1.3 初始化
为上面的静态变量赋值、执行静态代码块中的逻辑等。
二、进阶知识
2.1 类加载器
- 启动类加载器Bootstrap Class-Loader,负责加载jre/lib目录下面的jar文件;
- 扩展类加载器Extension Class-Loader,负责加载jre/lib/ext目录下面的jar文件;
- 应用类加载器Application Class-Loader,加载classpath中的内容;
- 自定义类加载器User Class-Loader;
2.2 双亲委派
即类加载器在接收到加载某个Class的请求的时候,会将该请求转发给父类加载器,只有在父类加载器在它负责区域中没有找到这个类的时候,才允许子类加载器加载该Class。
双亲委派主要是为了解决各个类加载器重复加载同一Class的问题。
网友评论