Java出现之前,C和C++是当时广泛使用的编程语言。但是C和C++都有一个共同的缺点,那就是只能在特定的平台进行编译。这里指的平台是由操作系统(OS)和处理器(CPU)构成的。C和C++源程序所在的特定平台对其源文件进行编译、连接,生成当前平台的机器指令(平台的机器指令可以被该平台直接识别和执行),根据当前平台的机器指令生成可执行文件。那么,在任何与当前平台相同的平台上都可以运行这个可执行文件。但每个平台都会形成自己独特的机器指令,相同的CPU和不同的操作系统所形成的平台的机器指令可能是不同的。假如电器的设备更换了,平台就不能保证程序能正确运行。这个时候可能需要修改源程序,并针对新的平台重新编译源程序。而Java最大的优势就是编写的软件能在所有的计算机上运行。之所以能做到这一点,是因为Java可以在计算机的操作系统之上再提供一个Java运行环境(Java Runtime Environment--JRE),该运行环境是由Java虚拟机(Java Virtual Machine--JVM)、类库以及一些核心文件组成。Java虚拟机的核心是字节码指令(字节码指令可以被Java虚拟机直接识别和执行),字节码指令不是机器指令,因此它不与特定的平台相关。而Java针对不同平台提供的Java虚拟机的字节码指令是相同的,先看看Java程序的运行过程:
Java语言提供的编译器不针对特定的平台进行编译,而是针对Java虚拟机编译成字节码(称为“中间代码”),字节码被Java虚拟机(Java解释器是Java虚拟机的一部分)解释、运行。Java虚拟机将字节码翻译成本地计算机的机器指令,并将机器指令交给平台运行。
上图是本篇博客的整理。为了更方便清晰的理解,我们可以脑补一个剧场:维奇多去了英国留学,凭借流利的英语和英俊的外表,他认识了很多英国朋友。有一天,他遇到了一个充满罗曼蒂克风情的法国美女。但很可惜,他不会法语,她不会英语,所以他们无法交流。橙汁是一个富二代,虽然他只会中文,但是他有钱,雇佣了一个万能翻译官,一起环游世界美滋滋呀无压力呀。
脑补完剧情,有没有更好的帮助你理解呢?总之,只要平台提供了Java运行环境,用Java编写的软件就能在其上运行。
本剧终。