验证

文件格式验证

这阶段的验证是基于二进制字节流进行的,只有通过了这个验证,这段字节流才允许进入Java虚拟机内存的方法区中进行存储。

元数据验证

对字节码描述的信息进行语义分析,主要是对类的元数据信息进行语义校验。

字节码验证

主要目的是通过数据流分析和控制流分析,确定语义是合法的、符合逻辑的。

这个阶段对类的方法体(即Class文件的code属性)进行校验分析。

JDK6以后,Javac编译器和Java虚拟进行了联合优化,尽可能多的校验辅助措施挪到了Javac编译器进行。

具体表现是Code属性中多了一个StackMapTable的新属性。

符号引用验证

发生在虚拟机将符号引用转化为直接引用的时候,这个转化将在连接的第三阶段,即解析阶段完成的。

准备

准备阶段是正式为类中定义的变量(static)分配内存并设置变量初始值的阶段。

解析

解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程