第12章 Java虚拟机.doc
文本预览下载声明
第12章 Java 虚拟机
【本章专家知识导学】
Java虚拟机是Java语言平的基石。所有的Java程序都执行于Java虚拟机之上。Java虚拟机实质是一个虚构的计算机,它与普通计算机一样,拥有自己的虚拟处理器,堆、栈、寄存器等存储机制及相应的指令系统。
本章深入的介绍了Java虚拟机构的结构和对Java程序的执行方式。学习完本章之后,读者应能够加深对Java语言及JavaSE体系结构的理解,提高编写高质量的Java程序能力。
12.1Java虚拟机概述
正如前所述,Java不仅仅是一个编程语言,它是一个软件开放运行平台,它主要由四个部分组成:Java语言、开发工具和APIs、JRE、Java 虚拟机(Java Virtual Machine,JVM ),如图1-4。它们之间的关系如图12-1所示。
图 12-1 Java平台各部分之间关系
开发人员通过Java语言编写Java源程序,然后通过Java编译器将其编译为Java字节码文件。在运行时Java虚拟机将Java字节码文件装载,并解释编译为本地机器所能识别的指令代码,在本地机器上执行。
从图12-1可知,Java 虚拟机处在核心位置,是Java程序平台无关性的关键。Java 虚拟机实质上是一个虚构的计算机,通过在实际的计算机上仿真模拟各种计算机来实现。它与实际的计算机一样,具有完整的硬件架构,拥有自己的虚拟处理器,堆、栈、寄存器等存储机制及相应的指令系统。Java平台利用Java虚拟机解释执行Java程序,实现Java程序与操作系统的分离,从而实现Java的平台无关性,摆脱具体机器的束缚。
12.2Java虚拟机的生命周期
Java 虚拟机负责装载、解析执行Java程序。当Java虚拟机启动执行一个Java程序时,Java虚拟机同时创建一个Java虚拟机实例(java进程);当程序执行完毕退出时,Java虚拟机进程同时关闭,?Java虚拟机实例结束生命周期。
Java虚拟机在启动时执行的Java程序,必须包含public static void main(String args[])方法。main方法是Java程序的入口方法,它将驱动程序相关的所有Java字节码文件。同时main方法也是Java程序初时线程的起点,任何其它的线程都由这个初时线程启动。Java虚拟机内部有两种线程:守护线程和非守护线程。守护线程通常由虚拟机自己使用,比如执行垃圾收集任务的线程。非守护线程由Java程序创建,只要非守护线程在运行,Java虚拟机实例也将一直在运行,直到该程序中所有的非守护线程都终止时,Java虚拟机实例才自动退出。??
12.3Java虚拟机数据类型
Java虚拟机是通过数据类型来执行计算的,数据类型及其运算都按Java虚拟机规范严格定义。对应于Java语言,Java虚拟机数据类型可分为两种:基本类型和引用类型(对应抽象数据类型),如图12-12。
图12-2 Java虚拟机数据类型
基本数据类型包括数据类型、boolean类型和returnAddress类型。Java语言中的所有基本类型同样也是Java虚拟机中的基本类型。但boolean类型有点特别。尽管Java语言定义了boolean类型,但是Java虚拟机没有用于boolean类型操作的指令。虽有创建boolean类型数组的指令,但也不支持对boolean数组元素的访问。在Java虚拟机中boolean型用int数据类型表示,其中false用整数零表示,true用非零整数表示。相应地,对boolean型的操作转换为对int类型的操作,boolean数组也用int数组指令访问和修改。 retuanAddress类型在Java语言中没有对应的类型,供予Java虚拟机的jsr,ret和jsr_w指令使用。returnAddress类型的值是Java虚拟机指令的操作码指针,与数值基本类型不同。
引用类型有三种:类类型、接口类型和数组类型。它们的值是对动态创建的类实例,数组或接口实现类实例的引用。引用值也可以是特殊的null引用,它不引用对象。null引用初始没有运行期类型,但是可以转换成任何类型。
Java虚拟机规范定义了每一种数据类型的取值范围,如表12-1。但是规范没有定义它们的位宽,存储这些类型的值所需的占位宽度,由具体的虚拟机实现的设计者决定。
表12-1 Java虚拟机数据类型的取值范围
类型 范围 Byte 8比特,带符号,二进制补码 Short 16比特,带符号,二进制补码 Int 32比特,带符号,二进制补码 Long 64比特,带符号,二进制补码 Char 16比特,不带符号,Unicode字符 Float 32比特,IE
显示全部