Java类加载过程

类加载过程

一、类加载过程流程图Java类加载过程
二、类加载过程

java 加载class时具体分为三大阶段

1、loading 加载阶段

这个过程主要是将class文件加载到虚拟机的过程

2、linking 链接阶段

在链接阶段中又分为三大步
1、verification 验证阶段,主要是验证加载的class是否符合class规范,如是否有语法错误,是否继承了final 类,符号引用的校验等。
2、preparation 在准备阶段,虚拟机会在方法区/元数据中为Class分配内存,并设置static成员变量的初始值为默认值。注意这里仅仅会为static变量分配内存(static变量在方法区/元数据中),并且初始化static变量的值为其所属类型的默认值。如:int类型初始化为0,引用类型初始化为null。
3、resolution 解析阶段,虚拟机会将常量池中的符号引用替换为直接引用,解析主要针对的是类、接口、方法、成员变量等符号引用。在转换成直接引用后,会触发校验阶段的符号引用验证,验证转换之后的直接引用是否能找到对应的类、方法、成员变量等。这里也可见类加载的各个阶段在实际过程中,可能是交错执行,具体的实现方式因虚拟机而定。

3、initializing 初始化阶段

初始化阶段即基于2阶段(linking)申请的Class内存空间中构造一个Class对象来表示该类,即执行类构造器()的过程。其主要的操作是1、对static变量进行赋值的操作2、执行static语句块中的操作。
注意:虚拟机会确保先执行父类的()方法,在执行子类的()方法。
如果一个类中没有static的语句块,也没有对static变量的赋值操作,那么虚拟机不会为这个类生成()方法,并且虚拟机会保证()方法的执行过程是线程安全的。