Java语言的运行机制
-
编译型语言
这指的是,通过一个编译器软件,把源文件转化为可执行文件。 可执行文件的内容,就是一些机器指令,以及相关的一些数据。在 Windows 中,可执行文 件往往以.exe 作为后缀名。在执行程序的时候,不需要源代码文件,只需要可执行文件即可。 示意如下: 源文件 – 编译器–> 可执行文件 运行可执行文件 --> 机器指令 -
解释型语言
解释型语言需要一个解释器软件,这个软件会读源 文件,在读文件的过程中,同时完成将源文件内容翻译成机器指令以及执行的过程。换句话 说,解释器将读取源文件、翻译成机器指令、执行指令这三步同时完成。示意如下: 文本文件 —解释器-> 直接翻译成机器指令 -
区别
编译型语言在将源文件编译成可执行文件之后,运行程序只需要可执行文件, 不再需要重复编译的过程。而解释型语言每次运行时必须重复翻译源文件,因此从运行效率 上来说,解释型语言远远不如编译型语言。
解释型语言也有自己的优势:跨平台性较好。由于编译型语言运行时只需要可执 行文件,而可执行文件又与平台紧密相连,这也就意味着,对于不同的平台,必须要有不同 的可执行文件才行。而相对而言,解释型语言就没有这么麻烦,对于不同的平台,只需要有 不同的解释器就可以了,源代码几乎不用进行修改 -
Java语言
Java 语言,则兼具有编译型和解释型两种语言的特点:Java 语言运行时,采用的是 先编译、后解释的方式运行。
首先,Java 源代码要写在后缀名为.java 的源文件中。然后,通过一个编译器,编译生 成.class 文件,这个文件被称为“二进制字节码文件”。
而.class 文件并不能够直接在机器上执行。执行.class 文件,需要一个解释器,这个解释 器会把.class 中的指令翻译成真正机器上的指令。也就是说,需要解释执行.class 文件。
示意如下: .java 源文件 – 编译 --> .class 字节码文件 – 解释执行 --> 真正的机器指令
字节码文件是平台中立的,也就是说,运行在不同平台上的.class 文件内容相同,与所 在平台无关。
那么.class 文件中保存的是什么内容呢?
这个文件中保存的也是计算机指令,所不同的 是,这些计算机指令不是真实计算机所拥有的指令,而是一些虚拟的指令。在解释执行.class 文件的指令时,为了能让这些虚拟的计算机指令能够转换成真正的计算机指令,我们需要一 个 Java 虚拟机(Java Virtual Machine,简称 JVM)。 JVM 事实上是一个软件,这个软件为 Java 程序模拟出一个统一的运行环境。Java 程序只 需要适应这个虚拟的环境,而与底层真正的硬件环境及操作系统环境无关。
换句话说,JVM 的作用在于,它屏蔽了底层不同平台的差异。
Java 虚拟机接收.class 文件中的虚拟指令,这些指令很类似于真正的汇编语言指令,但 这些指令与底层的操作系统平台和硬件平台无关,完全是另外设计出的一套独立体系。而不 同平台下的 Java 虚拟机,在执行时,会把.class 文件中的虚拟机指令翻译成对应平台上真正 的计算机指令。
因此,我们可以修改上面的示意如下: .java 源文件 – 编译 --> .class 字节码文件 –在 JVM 中解释执行–> 真正的机器指令