background image

  另外,JAVA 对程序的行为的定义也比 C 和 C++严格,如:它

提供了内存自动回收功能(GarbageCollection),使程序不能访问

越界内存;它对未初始化的变量提供确定值等等。它的这些特性能

够减小在不同平台上运行的 JAVA 程序之间的差异,也使得 JAVA

具有即使没有 JAVA 虚拟机的存在的情况下比 C 和 C++更好的平台

 

无关性。

  然而,这些特点也有它不利的一面。JAVA 设想运行于具有 32

位字节长度且每字节为 8 位

计算机

,这就使得那些 8 位字长的

计算机

一些巨型机不能有效的运行 JAVA 程序。在这样的平台上

就只能运行那些可移植的 C 和 C++程序了。 

  二、JAVA 作为一个虚拟机:CPU 可移植性 

  大多数编译器产生的目标代码只能运行在一种 CPU 上(如

Intel 的 x86 系列),即使那些能支持多种 CPU 的编译器也不能同

时产生适合多种 CPU 的目标代码。如果你需要在三种 CPU(如

x86、SPARC 和 MIPS

 

)上运行同一程序,就必须编译三次。

  但 JAVA 编译器就不同了。JAVA 编译器产生的目标代码(J-

Code ) 是 针 对 一 种 并 不 存 在 的 CPU–JAVA 虚 拟 机

(JAVAVirtualMachine),而不是某一实际的 CPU.JAVA 虚拟机能

掩盖不同 CPU 之间的差别,使 J-Code 能运行于任何具有 JAVA 虚

 

拟机的机器上。

  虚拟机的概念并不是 JAVA 所特有的:加州大学几年前就提出