# 二、JVM 规范

# 1. 作用

Java 虚拟机规范为不用的硬件平台提供了一种编译 Java 技术代码的规范。

该规范使 Java 软件独立于平台,因为编译是针对作为虚拟机的“一般机器”而做。

# 2. 内容

  • 字节码指令集(相当于 CPU)
  • Class 文件的格式
  • 数据类型和值
  • 运行时数据区
  • 栈帧
  • 特殊方法
  • 类库
  • 异常
  • 虚拟机的启动、加载、链接和初始化

# 3. 字节码指令集

见《Java 虚拟机规范(JavaSE 8 版)》 第 6 章。

# 4. Class 文件格式

见《Java 虚拟机规范(JavaSE 8 版)》 第 4 章。

# 4.1 说明

  1. Class 文件是一组以 8 字节为单位的字节流,各个数据项目按顺序紧凑排列。

    image-20210220163737374

  2. 对于占用空间大于8 字节的数据项,按照高位在前的方式分割成多个 8 字节进行存储。

  3. Class 文件格式里面只有两种类型:无符号数、表

    (1)无符号数:基本数据类型,以 u1、u2、u4、u8 来代表几个字节的无符号数;

    (2)表:由多个无符号数和其他表构成的复合数据类型,通常以**“_info”**结尾。

# 4.2 ClassFile 结构

每一个 .class 文件对应一个 ClassFile 结构:

image-20210220164530486

# 5. 特殊方法

# <init>

实例初始化方法,通过 JVM 的 invokespecial 指令来调用。

# <clinit>

类或接口的初始化方法,不包含参数,返回 void。

上次更新: 8/27/2021, 6:21:27 PM