JVM初探之类文件结构
java 的 .class 文件字节码如图:
Class 文件是一组以8字节为基础单位的二进制流,各个数据项目有着严格的结构。下面我们介绍下class文件的结构。
魔数
class文件的头4个字节是魔数: ,他的作用便是验证这个文件是否是一个java虚拟机可以使用的文件,
版本号
接下来的是两个字节的小版本号,和两个字节的大版本号: 。
常量池结构
它分为两个部分:
第一部分是:常量池的容量: 即二进制 54 ,代表了 53 项常量,注意这里的容量计数是从 1 开始的即索引范围是 1 ~ 53。
第二部分是:常量池的内容:常量池有的项目类型
CONSTANT_Utf8_info 1 UTF-8 编码的字符串
CONSTANT_Integer_infor 3 整型字面量
...
CONSTANT_Class_infor 7 类或接口的符号引用
...
这些项目类型还有自己的结构,这里先不写出来了。这一部分的字节码如图:
就是常量池容量后面的 53 个常量,一大堆的字节。后面其实还有的。。。。 就到这里吧。
访问标志
常量池之后就是两个字节的访问标志,用于识别类或者接口层次的访问信息。
一些访问标志:
ACC_PUBLIC 0x0001 是否为 public 类型
...
接下来是类索引、父类索引与接口索引集合,
↓
字段表集合
↓
方法表集合
↓
属性表集合
参考:深入理解java虚拟机 -- 周志明 著