JVM复习(二)-- Class文件格式简述

Class文件格式

图中是以java8的class字节码文件结构为例(以16进制展示),以下进行对该结构进行解析。
在这里插入图片描述

1. Magic

文件开头的4个字节用来存储magic(魔数),以16进制显示为CA FE BA BE,是class文件的统一标识符。jvm通过magic判断文件是否为class文件,以及文件是否受损(文件开头受损的可能性最大)。

2. 大小版本号

在magic后面的4个字节(第5-8字节)用于存储大小版本号(major version、minor version),小版本号在前两个字节,大版本号在后两个字节。上图中小版本号为0,大版本号转化为10进制是52,对应jdk版本参考下表(参考简书https://www.jianshu.com/p/fc44fdb337a6):

Major VersionMinor Versionjdk版本
4531.1
4601.2
4701.3
4801.4
4901.5
5001.6
5101.7
5201.8
5301.9
5401.10
5501.11

3. 常量池

版本号后面的两个字节(第9-10字节)用来存放常量池大小的计数(constant_pool_count),最大计数65535(16^4 - 1)。
常量计数往后的字节用于存放常量池的数据、访问修饰符、类的全限定名(包+类名)、父类的全限定名、实现接口数、接口常量、字段数、具体字段、方法数、具体方法、属性数、具体属性等信息。

4. Class字节码阅读器

idea使用Jclasslib插件可以对class文件进行解析查看。

后续阅读 JVM复习(三)-- 类加载器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大迪吃小迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值