Class校验器过程分析

Class 校验器

第一趟: Class 文件的结构检查。保证字节序列正确的定义了一个新类型,它遵循了 Java class 文件的固定格式,从而允许编译成方法区中的内部数据结构。

如所有的 Class 文件必须

1、  以魔数 0xCAFEBABE 开头

2、  检查主、次版本号必须在 JVM 支持范围之内

3、  字节序列长度合法,不存在多余字节(通过计算获得长度)

第二趟:类型数据的语义检查。不查看字节码,也不装载任何其他类型。而是检查每个组成部分,确认他们是所属类型的实例,而且结构正确。如:

1、  方法描述符(返回类型、参数类型及个数)字符串,符合特定的上下文无关文法。

2、  检查类本身是否符合 Java 规范,如除了 Object 以外均必须有一个超类

3、  final 方法是否被覆盖

4、  final 类没有被子类化

5、  常量池条目是否合法

第三趟:字节码验证。 Java 虚拟机对字节流进行分析

Exception

LinkageError 类间依赖,当编译完之前的类后,被引用的类发生了不相容的改变

NoClassDefFoundError extends LinkageError 找不到被引用类的定义

以上错误是在该类字节码被执行时,也就是虚拟机 Class 校验器进行第四趟扫描时发生。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值