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 Version | Minor Version | jdk版本 |
|---|---|---|
| 45 | 3 | 1.1 |
| 46 | 0 | 1.2 |
| 47 | 0 | 1.3 |
| 48 | 0 | 1.4 |
| 49 | 0 | 1.5 |
| 50 | 0 | 1.6 |
| 51 | 0 | 1.7 |
| 52 | 0 | 1.8 |
| 53 | 0 | 1.9 |
| 54 | 0 | 1.10 |
| 55 | 0 | 1.11 |
3. 常量池
版本号后面的两个字节(第9-10字节)用来存放常量池大小的计数(constant_pool_count),最大计数65535(16^4 - 1)。
常量计数往后的字节用于存放常量池的数据、访问修饰符、类的全限定名(包+类名)、父类的全限定名、实现接口数、接口常量、字段数、具体字段、方法数、具体方法、属性数、具体属性等信息。
4. Class字节码阅读器
idea使用Jclasslib插件可以对class文件进行解析查看。
后续阅读 JVM复习(三)-- 类加载器
本文详细解析了Java Class文件的结构,包括Magic(魔数)CAFEBABE、大小版本号与对应的JDK版本、常量池的构成及Class字节码阅读器的使用。通过Jclasslib插件可以直观查看Class文件内容,理解类加载过程的关键信息。
5805

被折叠的 条评论
为什么被折叠?



