Java 虚拟机 – 结构

数据类型

Java 虚拟机中有两种数据类型:原始类型和引用类型。这两种类型的值可以存进变量,作为参数传递,被方法返回,并通过原始值或者引用值进行操作。虚拟机不进行类型检查,所有的检查都在运行时之前处理完成。虚拟机通过虚拟机指令来确定参数类型如 iadd,ladd,fadd,dadd 都是两个数值操作类型返回一个数值结果的指令,分别对 integer, long, float, double 进行操作。
原始类型byteshortintlongchar
字节数816326416
默认值0000‘\u000000’
数值范围[-128,
127]
[-32768,
32767]

[-2147483648,
-2147483647]

[-9223372036854775808
, 9223372036854775807]
[0,
65535]
原始类型 float IEEE 754 double IEEE 754
字节数 32 64
默认值
+0+0
returnAddress 类型被虚拟机 jsr,ret,jsr_w 指令进行操作,returnAddress 的值指向一条操作码(opcode), returnAddress 不会作为 Java 语言中特定类型并且不能通过编程语言进行修改。 boolean 类型虽然在虚拟机中进行了定义,但实际中是使用 int 来表示的,虚拟机也是使用 byte 相关的指令对其进行操作,不存在 boolean 相关的操作指令, boolean 数组使用 newarray 指令创建,并使用 byte 数组指令 baload,bastore 进行访问。 引用类型有三种,分别是 class 类型,array 类型,interface 类型,null 没有具体的运行时类型,但可以强制转换为任意的引用类型。虚拟机规范没有规定 null 的具体值。

运行时数据区域