理解Java虚拟机体系结构Java开发Java经验技巧.doc
文本预览下载声明
理解Java虚拟机体系结构-编程开发技术
理解Java虚拟机体系结构
丿京文出处:LeoLiang
1概述
众所周知,Java支持平台无关性、安全性和网络移动性。jfu Java平台由Java 虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管 下层操作系统是什么。正是得益T Java虚拟机,它号称的“一次编译,到处运 行”才能有所保障。
1. 1 Java程序执行流程
Java程序的执行依赖于编译环境和运行环境。源码代码转变成可执行的机器代 码,由下面的流程完成:
运行时环境编译时环境
运行时环境
程序源文件
A javaBjavaCjavaA.classB.class
A java
Bjava
Cjava
A.class
B.class
A.classJava编译器B.class程序class文件通过本地或网络传递 class文件
A.class
Java编译器
B.class
程序class文件
通过本地或网络传递 class文件
D.class
Java虚拟机
HYPERLINK blogs.cblogs.c
Java技术的核心就是Java虚拟机,因为所冇的Java程序都在虚拟机上运行。
Java程序的运彳亍需要Java虚拟机、Java API和Java Class文件的配合。Java 虚拟机实例负责运行一个Java程序。当启动一个Java程序吋,一个虚拟机实例 就诞生了。当程序结束,这个虚拟机实例也就消亡。
Java程序 Java程序 Java程序 Java程序
针对Linux的Java平台
针对Win32的Java平台
针对电视的拒前平台
针对烤箱的拒灯平台
Linux机器
Window PC机器
电视机
烤箱
HYPERLINK /lao-liang/lao-liang
Java的跨平台特性,因为它有针对不同平台的虚拟机。
2 Java虚拟机
Java虚拟机的主要任务是装载class文件并且执行其中的字节码。由下图可以 看出,Java虚拟机包含一个类装载器(class loader),它可以从程序和API 小装载class文件,Java API小只有程序执行时需要的类才会被装载,字节码 由执行引擎来执行。
程序class文件
程序class文件
Java API的class文件
HYPERLINK /lao-lia/lao-lia ng/
当扭腹虚拟机由主机操作系统上的软件实现时,Ja眩程序通过调用本地方法和 主机进行交互。Java方法由Java语言编写,编译成字节码,存储在class文件 中。木地方法rtic/c++/汇编语言编写,编译成和处理器相关的机器代码,存储 在动态链接库中,格式是各个平台专有。所以本地方法是联系Java程序和底层 主机操作系统的连接方式。
由于Java虚拟机并不知道某个class文件是如何被创建的,是否被篡改一无所 知,所以它实现了一个class文件检测器,确保class文件中定义的类型可以安 全地使用。class文件检验器通过四趟独立的扫描来保证程序的健壮性:
class文件的结构检杏
?类型数据的语义检查
字节码验证
符号引用验证
Java虚拟机在执行字节码吋还进行其它的一些内置的安全机制的操作,他们作 为Java编程语言保证Java程序健壮性的特性,同时也是虚拟机的特性:
?类型安全的引用转换
?结构化的内存访问
?自动垃圾收集
?数组边界检查
?空引用检杏
1.3 Java虚拟机数据类型
Java虚拟机通过某些数据类型来执行计算。数据类型可以分为两种:基本类型 和引用类型,如下图:
HYPERLINK /laoJia/laoJia ng/
boolean有点特别,当编译器把Java源码编译为字节码时,它会用int或byte 表示boolcano在Java虚拟机中,false是由0表示,rfo true则由所有非零整 数表示。和Ja眩语言一样,Java虚拟机的基本类型的值域在任何地方都是一致 的,不管主机平台是什么,一个long在任何虚拟机中总是一个64位二进制补码 的有符号整数。
对于returnAddress,这个基本类型被用来实现Java程序屮的finally子句, Java程序员不能使用这个类型,它的值指向一条虚拟机指令的操作码。
2体系结构
在Java虚拟机规范中,一个虚拟机实例的行为是分别按照子系统、内存区、数 据类型和指令來描述的,这些组成部分一起展示了抽象的虚拟机的内部体系结 构。
2. 1 class 文件
Java class文件包含了关于类或接口的所冇信息。class文件的“基本类型”如 下:
ul 1个字节,无符号类型
u2 2个字节,无符号类型 u4 4个字节,无符号类型 u8 8个字节,无符号类型
如果想了解更多,Oracl
显示全部