现在的位置: 首页 > 综合 > 正文

Java的平台无关性

2018年02月16日 ⁄ 综合 ⁄ 共 1452字 ⁄ 字号 评论关闭
什么是JVM?
JVM所指的就是Java虚拟机。Java正是凭借Java虚拟机来实现其平台无关性的。通过在机器编译程序之间加入一层抽象(即JVM)来实现脱离平台这一性质。
其中,注意:
Java虚拟机面向编译器给其提供相同的接口(即各平台编译器相同),这就是说,编译器只要面向Java虚拟机生成Java虚拟机可以理解的代码,那么就可以通过不同平台的不同解释器来生成与平台相对应的机器码来执行Java程序。虚拟机暴露给编译器的接口是相同的,而虚拟机的解释器针对不同的平台而不同。
蓝线关于Java平台无关性的描述:
为了适应多样性的运行环境,Java编译器生成字节码--一种被设计用来将代码高效地转换到多种硬件和软件平台的架构无关的中间格式。
红线关于JVM的描述:
(JVM)是一个抽象机器的规范,通过这个规范Java编程语言编译器可以生成代码(中间码)。针对不同的硬件和软件平台有其各自的Java虚拟机实现,而不是提供一个统一的对于虚拟机的具体实现。

Java解释器可以直接在移植了解释器与运行时系统的任何机器上执行字节码。
画线部分是对JVM的又一次定义:
假象的机器--由Java解释器和运行时系统实现。

Java字节码有两种执行方式:①interpret②动态翻译成本地机器代码。这取决于性能需求。这是什么意思?
这句话所说的是:在Java虚拟机的规范中,对于Java程序的执行只要求解释执行这种方式,而为了性能,在一些商用的Java虚拟机中(如Sun HotSpot、IBM J9)支持JIT编译器(Just In
Time Compiler)。JIT Compiler所指的是当JVM在运行字节码时发现有一段代码被频繁地执行,此时,为了提高性能,JIT Compiler就会将这部分代码编译成本地平台相关的机器码。(《深入理解Java虚拟机》)

JIT Compiler(即时编译器)横空出世。

为什么需要JVM来实现跨平台?

这就涉及到计算机是如何执行程序的这一基本问题。

1,http://woody2049.blog.163.com/blog/static/132279789201210542746796/
首先,CPU只能执行0、1指令,几十年来没有变化;其次,直接输入0、1代码的编程方式不适应需求,已经被淘汰,人们开始使用高级语言(C、C++、Java等)编写程序;然后,为了执行由高级语言编写的程序,就需要程序(即“编译程序”)来将高级语言源程序编译成低级机器语言程序;接着,编译生成的可执行程序文件会存储在外部磁盘中,当要执行程序时,就由操作系统将源程序从磁盘复制到内存,然后CPU就从内存中复制并执行指令,从而执行程序。就这样,CPU就可以执行由高级语言编写的源程序了。
2,《深入理解计算机系统》
下图为程序编译的基本流程:
3,从上面的介绍可以看到,高级语言编写的程序必须最终转换为CPU可以执行的机器指令(0、1数字),而机器指令是由编译程序从源程序编译得到的,如果编译程序直接面向某一具体的机器来生成对应的机器指令,则这样的可执行程序也就只能在该类机器上执行了;而如果编译程序面向JVM这一虚拟中间平台来生成JVM可以执行的机器程序,那么,Java可执行程序就能在任何支持JVM的平台上执行了。
【上篇】
【下篇】

抱歉!评论已关闭.