View on GitHub

JVMByteCodeGitBook

《Java虚拟机字节码:从入门到实战》第二版《深入浅出JVM字节码》开源电子书。这本书详细介绍ASM框架的API、Class文件结构解析、HotSpot虚拟机类加载源码分析、动态代理与字节码插桩的实现。

Class文件结构

根据《Java虚拟机规范》的规定,class文件结构如下表所示。

class文件结构
类型 说明
u4 Magic(魔数)
u2 Minor Version(副版本号)
u2 Major Version(主版本号)
u2 Constant Pool Count(常量池计数)
cp_info Constant Pool[常量池计数-1] (常量池数组)
u2 Access Flags(访问标志,如public)
u2 This Class(类索引,在常量池表中的索引)
u2 Super Class(父类索引,在常量池表中的索引)
u2 Interfaces Count(接口总数)
u2 Interfaces[接口总数]
u2 Fields Count (字段总数)
field_info Fields[字段总数] (字段表)
u2 Methods Count(方法总数)
method_info Methods[方法总数-1] (方法表)
u2 Attributes Count(属性总数)
attribute_info Attributes[属性总数](属性表)

其中类型u2、u4是《Java虚拟机规范》中定义的类型,分别表示两个字节、四个字节,而cp_info、field_info、method_info、attribute_info都是结构体,与class文件结构一样,它们也有固定的格式,这些结构体我们后面在实现class文件结构解析器过程中再详细介绍。

从表“class文件结构”可以看出,一个完整的class文件按照顺序存储了魔数、版本号、常量池计数、常量池数组、该类的访问标志、this符号索引、继承的父类的符号索引、实现的接口总数与接口表、字段总数与字段表、方法总数与方法表、属性总数与属性表。


发布于:2021 年 07 月 10 日
作者: 吴就业
GitHub链接:https://github.com/wujiuye/JVMByteCodeGitBook
链接: https://www.wujiuye.com/ebook/JVMByteCodeGitBook/chapter/chapter02_00.md
来源: Github Pages 开源电子书《深入浅出JVM字节码》(《Java虚拟机字节码从入门到实战》的第二版),未经作者许可,禁止转载!