深入理解java虚拟机-读书笔记3-类文件结构

时间:2022-12-27 21:03:32

虚拟机不和包括java在内的任何语言绑定,只与“class”文件这种特定的二进制文件格式所关联。


Class类文件格式采用类似C语言结构体的伪结构来存储,这种伪结构中只有两种数据类型:无符号数和表。

  1. 无符号数:基本的数据类型,以u1、u2、u4、u8来分别代表1、2、4、8个字节的无符号数,可以用来描述数字、索引引用、数量值等。
  2. 表:由多个无符号数或者其他表作为数据项根成的复合数据结构。用于描述有层次关系的复合结构的数据,整个Class文件本质上就是一张表。

class类文件的结构
1. 魔数:头4个字节,CAFEBABE
2. 版本号:5-6,次版本号;7-8,主版本号
3. 常量池:首先是u2类型的计数,从1开始。
常量池中主要存放两类数据:
字面量:文本字符串、fianl常量等。
符号引用:属于编译原理方面的概念,包括下面三类常量:
a .类和接口的权限定名
b .字段和方法的名称和描述符
c .方法的名称和描述符
4. 访问标志:用于识别一些类或者接口层次的访问信息
5. 类索引、父类索引与接口索引集合:确定这个类的继承关系。
6. 字段表集合:描述接口或者类中声明的常量。
7. 方法表集合:描述方法,但是方法的代码并没有直接存放在方法表中,而是存放在属性表集合中。
8. 属性表集合:在Class文件、字段表、方法表都可以携带自己的属性表集合,以用于描述某些场景转悠的信息。


字节码指令简介
java虚拟机的指令由一个字节的操作码以及跟随其后的零至多个操作数构成。包括:
1. 加载和存储指令
2. 运算指令
3. 类型转换指令
4. 对象创建与访问指令
5. 操作数栈管理指令
6. 控制转移指令
7. 方法调用和返回指令
8. 异常处理指令
9. 同步指令