另外,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 所特有的:加州大学几年前就提出