- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 Java虚拟机
第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
文档评论(0)