我想了解Java源代码如何执行,但对JVM内部的JIT编译器感到困惑。让我先告诉您从Java源代码到在计算机上执行机器代码的过程是如何理解的。也许,在这个过程中我误解了一些东西,导致了困惑。
以下是步骤:
1. 源代码被编译成字节码(.class文件) 2. 类文件被加载到JVM(位于RAM中) 3. 字节码被验证,然后由JIT编译器处理 4. JIT编译器的输出是准备好执行的机器代码
根据Wikipedia关于JVM的文章,更具体地说是"Bytecode interpreter and just-in-time compiler"章节,为了执行Java字节码,需要一个解释器(但我们有一个JIT编译器)。
现在这里有一点令我困惑。我将其分解为引用:
"When Java bytecode is executed by an interpreter, the execution will always be slower than the execution of the same program compiled into native machine language."
以下是步骤:
1. 源代码被编译成字节码(.class文件) 2. 类文件被加载到JVM(位于RAM中) 3. 字节码被验证,然后由JIT编译器处理 4. JIT编译器的输出是准备好执行的机器代码
根据Wikipedia关于JVM的文章,更具体地说是"Bytecode interpreter and just-in-time compiler"章节,为了执行Java字节码,需要一个解释器(但我们有一个JIT编译器)。
现在这里有一点令我困惑。我将其分解为引用:
"When Java bytecode is executed by an interpreter, the execution will always be slower than the execution of the same program compiled into native machine language."
由于计算机只能执行机器码,解释器在将字节代码转换为机器码方面比编译器慢,那么为什么JVM使用解释器而不是编译器?
为什么我们没有另一个由JIT编译器为CPU生成的中间可执行文件,以便快速执行指令?
"JIT编译器可以在执行程序时将Java字节码转换为本地机器语言。程序的已翻译部分可以比解释执行快得多。该技术应用于频繁执行的程序部分。"
JIT编译器真的是一种具有编译经常执行代码能力的解释器吗?编译器和解释器这两个术语是否被错误地交替使用了?
提前致谢。