JVM类的结构与字节码
Class文件内部结构
- 魔数
每个Class文件开头的4个字节的无符号整数称为魔数。魔数是Class文件的标识
,用于确定这个文件是否是能被虚拟机接收的合法的Class文件。
固定值 CAFEBABE 咖啡宝贝。如果Class文件不以CAFEBABE开头,JVM在进行文件校验时会抛出异常
- CLass文件版本
- 紧接着魔数的 4 个字节存储的是 Class 文件的版本号。第1、2个字节的含义是
编译的副版本号minor_version
,第3、4个字节是编译的主版本号major_version
- 它们共同构成了 class 文件的格式版本号
- 紧接着魔数的 4 个字节存储的是 Class 文件的版本号。第1、2个字节的含义是
- 常量池
- 常量池计数器:常量池中常量的数量是不固定的 ,所以在常量池的入口需要放置一项u2类型的无符号数,代表常量池容量计数值。
- 常量池表:主要存放字面量和符号引用
- 访问标志
- 用于识别一些类或者接口层次的访问信息,如:是否为 public、是否声明 final等
- 类索引,父类索引,接口索引集合
- 字段表集合
- 字段计数器
- 字段表
- 方法表集合
- 方法计数器
- 方法表
- 属性表集合:
指 class 文件所携带的辅助信息,如:class源文件名称
- 属性计数器
- 属性表