前面只是简要介绍了Java程序的运行过程,如果要深入了解Java,比如弄明白Java源代码是如何被编译成二进制chas文件的,并且hva程序是如何实现跨平台运行的,就需要读者对加va虚拟机有一定的了解、Java跨平台的原理用图形描述如图2.17所示

图217Java跨平台运行原理
说明:
JVM在不同平台上有其特别版本,例如在 Solaris 系统上执行Java程序必须要有 Solaris适用的JVM,要在 Windows系统上运行则必须有适用Windows系统的JVM.Java虚拟机屏蔽了底层运行平台的差别,实现了“一次编译,到处运行
Java虚拟机 JVM(ava Virtual Machine)在Java编程里面具有非常重要的地位,可以简单等同于前面学到的Java运行环境,可以把Java虚拟机理解为真实机器中用软件模拟实现的一种想象机器。它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信。
Java虚拟机在运行过程中的位置如图2.18所示。

图2.18Java虚拟机的位置
JVM是由编译的Jwa类组成的,其目的在于执行Java程序。虚拟机的三个主要任务是
装载程序、检验程序、执行程序。每个任务的具体阐述如下所示
(1)类装载器
程序执行时类装载器会将所需的类载入。类装载器(也称类加载器)以分离的命名空间的方式来区别类是由本地系统装载还是经由网络远程装载来增加安全性。本地系统的类会先被装载,可以防止木马程序的入装载所有类后,可执行文件的内存布局就确定了,这时候特定内存地址会被指定给特定的符号引用,且会创建寻找表格。因为内存的布局发生在运行时,因此Java解释器会限制来经授权的访间,以保护受限的程序代码
(2)字节码校验器
Java程序在执行前会被多次检验,JVM会检验字节码的格式是否有错,是否违反对象访问权限或更改对象类里,所有源于网格的类文件都要经过字节码校验器
校验器对程序代码进行四校验,这可以保证代码符合规范并且不破坏系统的完整性
如果校验器在完成四遍校验后未返回出错信息,则下列各点可被保证
类符合JVM规范的类文件格式
无访问限制异常
代码未引起操作数栈上溢或下溢
所有操作代码的参数类型将总是正确的
无非法数据转换发生,如将整数转换为对象引用
对象域访问是合法的
(3)执行程序
源代码执行java命令被编译为二进制文件后,执行java命令可以运行程序
Java虚拟机在编译和运行期间进行的操作步骤如下所
①编写代码
首先把我们想要计算机做的事情,通过Java表达出来,写成Java文件,这个过程就是
编写代码的过程。如前面所示的 Hello World. java文件
②编译
写完Java代码后,机器并不认识所写的Java代码,需要通过编译工具软件 Javac. exe将源代码编译成class字节码文件,编译后的文件叫作 .class文件
③类装载器 ClassLoader
根据设定好的 classpath路径找到对应的 class文件,通过java.exe运行工具来运行class字节码文件。 ClassLoader能够加强代码的安全性,主要方式是:把本机上的类和网络资源类分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用
④字节码( byte-code)校验
功能是对class文件的代码进行校验,保证代码的安全性。Java软件代码在实际运行前要经过几次测试。JVM将代码输入一个字节码校验器以测试代码段格式并进行规则检查一检查伪造指针、违反对象访问权限或试图改变对象类型的非法代码
⑤解释( interpreter)
机器也不能认识 class文件,还需要被解释器进行解释,机器才能最终理解所要表达
6.最后由运行环境中的 Runtime对代码进行运行,真正实现我们想要机器完成的工作为了使读者对上述步骤有较深的理解,这里我们绘制了图2.19,来描述Java虚拟机在编译和运行期间所做的工作

解释器和JIT运行的区剧主要体现在以下两个方面
(1)解释器:每扫描一行,就执行一行指令,就如同声翻译一样,发言人说一句翻译人员翻译一句,效率比较低
(2) JIT代生成器:将整个代码一次性翻译完,然后一次性运行,就如同总经理将自己的发言文稿一次性交给翻译人员,翻译人员全部翻译出来后,统一在演讲时一次性念出来效率稍高
Java通过一个编译阶段和一个运行阶段,来让机器最终理解我们想要它完成
的工作并按照我们的要求进行运行。在这两个阶段中,需要完成的就是编译阶段的工作,也就是说我们要把交付机器完成的工作用加语言表达出来,写成上java源文件,然后把他进行端译,形成心class文件,最后就可以在加Java运行环境中运行了。运行阶段的工作由Java平台自身提供,我们不需要做什么工作
网友评论