您的位置 首页 java

java_class文件验证&准备&解析

class文件加载到内存之后,紧接着就是类初始化之前的验证,准备,解析

验证(verification)

验证class文件的内容符合当前jvm和 java 规范,确保后期的使用不会破坏jvm。

具体的检验流程为

文件格式验证 :验证 二进制 字节流符合Class文件格式规范。验证通过后,字节流转换成特定数据结构存储至方法区中。

元数据验证 :对 字节码 描述信息进行语义分析,确保符合Java语法规范

字节码验证 :对方法体进行语义分析,保证方法在运行时不会出现问题

符号引用验证 :保证可以将符号引用转化为直接引用,在准备阶段开始。

准备(preparation)

类准备阶段负责为类的静态变量分配内存,并设置默认初始值。short默认( short )0,byte默认(byte)0,char默认\u0000,int默认0,float默认0.0f,double默认0.0d,boolean默认false,reference默认null

解析(Resolution)

将类的二进制数据中的符号引用替换成直接引用。符号引用:符号引用是以一组符号来描述所引用的目标,符号可以是任何的字面形式的字面量。直接引用:是指向目标的指针,偏移量或者能够直接定位的句柄。替换不成功,说明符号引用验证失败。

最后,还要 解释一个 问题 一般情况,我们的 class文件 都是编译器根据java和jvm规范编译的,不符合规范,在编译阶段就回报错,根本不可能到加载这一步,那是不是验证就不需要了呢? 答案是 否定的 ,如果通过某种方法,直接修改了class文件的内容,编译器是不知道的,所以class的验证是必不可少的。

此文只为在您脑海留下印象,待后深究。

文章来源:智云一二三科技

文章标题:java_class文件验证&准备&解析

文章地址:https://www.zhihuclub.com/188317.shtml

关于作者: 智云科技

热门文章

网站地图