《Java虚拟机规范8》

一、引言

Java虚拟机是跟Java语言没有必然联系,仅通过Class文件关联。

二、Java虚拟机结构

数据类型

基本类型

表示类型
整型为二进制有符号补码整数。

  1. byte 1 -128~127 8位,-2^7~2^7-1
  2. short 2
  3. int 4
  4. long 8
  5. char 2
  6. float 4
  7. double 8
  8. returnAddress:指向操作码的指针,不属于Java语言,名存实亡。
  9. boolean:第2版规范才出现

内部运算类型
int float reference double long

引用类型

  1. 类类型:类实例
  2. 接口类型:接口实例
  3. 数组类型:数组实例

运行数据区

PC寄存器:当前线程的当前执行指令地址
虚拟机栈:存储栈帧
堆:GC区域
方法区:元信息
本地方法栈:

栈帧

存储方法数据和过程结果的结构
局部变量表:用于参数传递
操作数栈:指令操作的数据,类似寄存器。

特殊方法

对象表示

无强制规定。
某些实现中,堆中指向对象的实例指是其实是句柄,

异常

通过转移指令,基于class文件中的异常查找表

指令

操作码(1字节)+操作数(>=0)

  1. 加载和存储指令
  2. 算术指令:四则、余、负、位移、或与异或
  3. 类型转换指令
  4. 对象创建操作
  5. 操作数栈管理:pop push等
  6. 控制转移:条件分支
  7. 方法调用指令
  8. 异常指令
  9. 同步锁指令:仅synchronized块,方法同步由方法表中的标志位控制

类库

  1. 反射
  2. 类加载
  3. 安全 java.lang.security
  4. 线程
  5. 弱引用 java.lang.ref

三、编译器

  1. 隐式操作码 如iload_1 代替 iload 1,

四、 字节码文件

  1. 文件头
  2. 常量池:值+符号引用
  3. 字段
  4. 方法

五、类加载

加载-验证-解析-初始化

Comments
Write a Comment