background image

 
◆double://8 字节 IEEE754 双精度浮点数

  ◆char://2 字节无符号 Unicode 字符

  几乎所有的 Java 类型检查都是在编译时完成的。上面列出的原始数据类型的数据

在 Java 执行时不需要用硬件标记。操作这些原始数据类型数据的字节码(指令)本身就已经
指出了操作数的数据类型,例如 iadd、ladd、fadd 和 dadd 指令都是把两个数相加,其操作数类
型别是 int、long、float 和 double。虚拟机没有给 boolean(布尔)类型设置单独的指令。boolean
型的数据是由 integer 指令,包括 integer 返回来处理的。boolean 型的数组则是用 byte 数组来
处理的。虚拟机使用 IEEE754 格式的浮点数。不支持 IEEE 格式的较旧的计算机,在运行
Java 数值计算程序时,可能会非常慢。

  虚拟机支持的其它数据类型包括:

  ◆object//对一个 Javaobject(对象)的 4 字节引用

  ◆returnAddress//4 字节,用于 jsr/ret/jsr-w/ret-w 指令

  注:Java 数组被当作 object 处理。

  虚拟机的规范对于 object 内部的结构没有任何特殊的要求。在 Sun 公司的实现中,

对 object 的引用是一个句柄,其中包含一对指针:一个指针指向该 object 的方法表,另一个指
向该 object 的数据。用 Java 虚拟机的字节码表示的程序应该遵守类型规定。Java 虚拟机的
实现应拒绝执行违反了类型规定的字节码程序。Java 虚拟机由于字节码定义的限制似乎只
能运行于 32 位地址空间的机器上。但是可以创建一个 Java 虚拟机,它自动地把字节码转换
成 64 位的形式。从 Java 虚拟机支持的数据类型可以看出,Java 对数据类型的内部格式进行
了严格规定,这样使得各种 Java 虚拟机的实现对数据的解释是相同的,从而保证了 Java 的
与平台无关性和可移植性。

 二、Java 虚拟机体系结构

  Java 虚拟机由五个部分组成:一组指令集、一组寄存器、一个栈、一个无用单元收

集堆(Garbage-collected-heap)、一个方法区域。这五部分是 Java 虚拟机的逻辑成份,不依赖任
何实现技术或组织方式,但它们的功能必须在真实机器上以某种方式实现。

  1.Java 指令集

  Java 虚拟机支持大约 248 个字节码。每个字节码执行一种基本的 CPU 运算,例如,

把一个整数加到寄存器,子程序转移等。Java 指令集相当于 Java 程序的汇编语言。

  Java 指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有 0 个

或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作
符构成。