Java程序运行机制
-
编译型
编译型语言(Compiled language)
这类型的编程语言,通过编译器来实现。它不像解释型语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器代码,再加以运行。
举例:老外想看《三体》,中文书翻译成英文书,特点是一次翻译一直可以看,但是书籍更新,需要重新整本翻译。
-
解释型
解释型语言(Interpreted language)
这种类型的编程语言,会将代码一句一句直接运行,不需要像编译语言(Compiled language)一样,经过编译器先行编译为机器代码,之后再运行。这种编程语言需要利用解释器,在运行期,动态将代码逐句解释(interpret)为机器代码,或是已经预先编译为机器代码的子程序,之后再运行。
举例:老外想看《三体》,请一个翻译官给他翻译内容,缺点是如果看一次就得翻译一次,但是书籍更新翻译官可以及时更新。
-
程序运行机制和JVM
Java 语言相对于独立的解释型和编译型, 又有一些不一样。区别在于编程器编译的不是最终可以运行的机器语言, 而是能够运行在 Java 虚拟机 ( JVM: Java Virtual Machine)中的字节码。Java 虚拟机只要是用来运行 Java字节码文件的虚拟机。不同的平台上编译器提供了统一的编程接口,而 Java 编译器只需要面向 Java 虚拟机, 生成虚拟机能够运行的代码。 然后由 Java 虚拟机解释执行,并且在虚拟机中把代码转换成平台能够识别的机器码来运行程序, 从而做到了一次编译, 多个平台运行的跨平台特性。
这里 JVM 也就是 Java 虚拟机中介的概念。 原先你要去租房, 你有一个要租房的“需求”(源代码), 而每个房东都是你的“运行”环境。 每看一次房子都需要单独的找到对应房子的房东进行 “租”(编译) 的过程。 这个时候, 有个房屋托管(虚拟机)说, 你不要找房东了太麻烦, 我这有这个区的“房源”, 你来找我就好, 这样你以后租房子就可以只找这个中介就可以看这个区的房子, 这样的话, 你不用来回和不同的房东打交道, 你也不需要知道这些房东是男是女, 是好说话还是不好说话。 但是既然是中间打的交道, 就需要有一些佣金(性能的损耗)。并且你能看多少套房子,就取决于中介有多少房源。 也就是 Java 虚拟机能在那运行, 你的程序就可以在那运行。