龙空技术网

java_class文件验证&准备&解析

小有心得 47

前言:

而今小伙伴们对“javaclass文件”大约比较注重,大家都想要知道一些“javaclass文件”的相关内容。那么小编同时在网摘上搜集了一些关于“javaclass文件””的相关知识,希望各位老铁们能喜欢,兄弟们一起来学习一下吧!

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的验证是必不可少的。

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

标签: #javaclass文件