📚《深入浅出JVM字节码》

《Java虚拟机字节码:从入门到实战》的开源版本。作者通过自己的实战经验,整合出一套适合新手的高效学习教程。归纳并提炼知识点,制定合理路线,帮助读者更快掌握核心技术。


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 日
作者: 吴就业
链接: https://github.com/wujiuye/JVMByteCodeGitBook
来源: Github Pages 开源电子书《深入浅出JVM字节码》(《Java虚拟机字节码从入门到实战》的第二版),未经作者许可,禁止转载!


📚目录