Java虚拟机:
Java 最大的特点在于其可移植性。对于可移植性而言,其本身的实现关键在于Java语言的运行机制和它对应的虚拟机(JVM)。
关于运行机制: 从传统的编程语言来说有两种运行机制: 编译型和解释型。
问题一: 解释型语言和编译型语言说明?
首先我们要明白,计算机是不能直接理解例如c、c++、java 等高级语言的,它只能理解机器语言,所以我们必须把高级语言转换成机器语言,计算机才能执行高级语言编写的程序。而转换的方式有两种:1. 编译 2. 解释。根据转换方式的不同,高级语言就分为编译型语言和解释型语言。
编译型语言: 使用专门的编译器、针对特定平台(操作系统)将某种高级语言源代码一次性“翻译”成该平台硬件执行的机器码,并包装成该平台所能识别的可执行程序的格式,这个转换过程称为编译( compile )。编译生成的可执行程序可以在特定的平台直接运行,所以通常它的运行效率比较高。但是因为编译型语言的程序被编译成特定平台(操作系统)上的机器码,因此编译生成的可执行程序通常无法移植到其它平台上运行。如果需要移植,则必须将源码复制到特定的平台上,再针对特定的平台做相应的修改,所以它的可移植性很差。例如 c、c++等都是编译型原因。
解释型语言: 使用给专门的解释器,在运行时将源程序进行逐行解释成特定平台的机器码并执行的语言,由于它的每一次执行都要边翻译边执行,所以它的运行效率相对比较低。但可以针对不同的平台提供相对应的解释器,然后每个特定平台上的解释器负责将源程序解释成特定平台的机器指令即可在特定的平台上执行,所以它的可移植性很好。
Java属于两种语言类型的组合: 1. 编译命令: javac.exe 2. 解释命令: java.exe
Java 程序组成: Java 源文件、字节码文件、机器码指令
例如: 一个 Hello.java 源代码,先经过编译器编译一个 Hello.class字节码文件,然后再经过解释器生成可被计算机执行的机器码文件。
问题二: Java 虚拟机是什么?
Java虚拟机(Java Virtual Machine)
1. 在一台计算机上由软件或硬件模拟的计算机,可以把它理解为运行 Java 程序的抽象计算机。
2. Java 虚拟机( JVM )读取并处理经 Java 编译器编译过的平台无关的字节码 class 文件。
3. 针对不同的平台(操作系统)会提供有不同版本的 Java 虚拟机,而 JVM 会根据不同的操作系统有不同的技术实现,但对于使用者而言,最终通过 JVM 生成的机器码的功能都是一样的,所以这就是 Java 实现可移植性的关键所在。
如上图所示, Source.java 经过 java 编译器编译为 Source.class 字节码文件,然后不同操作系统相对应不同的 JVM 会将其翻译为特定操作系统可运行且功能相同的可执行文件。而平台差异性相关的处理都由 JVM 处理并对使用者屏蔽,在使用者体验就是一个 Source.java 源程序在不同操作系统所实现的功能都是一样的。所以 Java 的可移植性关键所在就是---JVM。