为什么当JIT也编译字节码时,Java既是编译语言又是解释型语言?
2022-09-03 17:34:47
我读到,Java源代码被编译成“字节码”,然后由JIT再次“编译”成“机器代码”。也就是说,源代码首先被编译成一个独立于平台的字节码,然后再次编译成一个机器特定的代码。那么为什么它被称为解释型和编译型语言呢?解释在哪里进行?
我读到,Java源代码被编译成“字节码”,然后由JIT再次“编译”成“机器代码”。也就是说,源代码首先被编译成一个独立于平台的字节码,然后再次编译成一个机器特定的代码。那么为什么它被称为解释型和编译型语言呢?解释在哪里进行?
这里有一点误解。
在正常情况下,java compiler()将java代码编译为字节码,java interpreter()逐行解释这些字节码,将其转换为机器语言并执行。javac
java
JIT(Just in time)
编译器是有点不同的概念。JVM 维护函数执行的次数。如果它超过限制,那么JIT就会进入画面。java代码直接编译成机器语言,并用于执行该功能。
它有一个规范(JLS),定义了Java程序应该如何操作。
作为一种语言本身,它没有指定它应该如何在不同的平台上执行。它的运行方式,使用JIT或不带JIT是完全基于实现的。
如果我明天编写一个根本不做JIT编译的Java运行时,我可以调用Java解释。
如果我使用Java机器(人们认真制作了这些机器)使用Java字节码作为汇编,我可以调用Java严格编译。
许多其他语言都这样做: