类加载过程---验证
目的:
为了保证class文件中字节流包含的信息符合java虚拟机的要求。
四个阶段验证:
1 文件格式验证
目的:确保class文件格式的规范。
确保输入的字节流正确解析,并存储于方法区之内。所以此阶段是基于二进制字节流进行的。而后面的三个验证阶段,全部是基于方法区的存储结构进行的。
比如:验证魔数,主次版本,常量类型等
2 元数据验证
目的:对字节码描述的信息进行语义分析,确保其描述的信息符合java语法规范。
比如:检查接口和父类,继承与抽象方法等
3 字节码验证
目的:对类的方法体进行校验分析,主要通过数据流和控制流分析,确定程序语义是合理,符合逻辑的。
比如:跳转指令,方法体中的类型转换是有效的等
4 符号引用验证
目的:它发生在虚拟机将符号引用转化为直接引用的时候。其目的是确保解析动作能正常执行。
符号应用可以看作是对类自身以外的信息进行匹配性校验。
备注:
验证阶段是非必要的,可以使用-Xverify:none参数来关闭大部分的类校验措施,以缩短虚拟机类加载的时间。
Boy-20180721