为了实现java程序的可移植性,java语言对这种模式进行了改进,在机器和编译程序之间增加了一层抽象的虚拟机器,称之为java虚拟机。这样,java编译器没有将程序直接编译为某一种特定计算机的机器语言,而是编译成字节码。字节码是一种针对JVM的机器语言,由于JVM类似于典型的计算机,因此字节码可以很容易地被解释成为特定的计算机机器语言,执行这种解释工作的程序被称为解释器。解释器对字节码指令是翻译一条,执行一条,而不是一次性翻译所有的字节码程序。那么,这就意味这,字节码程序可以通过internet传送到另外一台计算机上方便地运行。这正是网络编程的原因之一。
Java程序与编译运行环境的相互关系。
JVM在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转化为特定系统的机器码执行。
在java中提供给虚拟机理解的字节码不面向任何特定到底处理器,只面向虚拟机。从结构上看JVM与实际的计算机相似,由一组抽象的部件组成,包括指令集、寄存器组、类文件格式规定、堆栈、内存垃圾收集器和存储区6个部分。其中,指令集采用与平台无关的字节码形式,寄存器组中包含程序计数器、堆栈指针、运行环境指针和变量指针,类文件也与平台无关,堆栈指针用来传递参数和返回运行环境,垃圾收集处理器不再使用内存片段,存储区则用来存放字节码。JVM仅仅规定了部件的功能和规格,虽然这些功能也是统一的,但是没有规定部件具体的实现技术。