【发布时间】:2016-06-16 20:50:39
【问题描述】:
根据我的理解,如果 Java 解释器单独开始逐行执行字节码,性能会很慢,因此 JIT 用于代码优化以更快地执行代码。
JIT编译器优化代码,java解释器逐行翻译优化后的代码。由于JIT只在运行时运行,所以我们没有得到任何二进制输出。一旦解释器翻译,就会产生二进制代码。
---现在我的问题是,JIT 和 JAVA 解释器可以一起工作吗? 或者, jit编译器先工作,然后java解释器开始工作?
请确认一下?
【问题讨论】:
-
Java 字节码中没有行,因此解释器不会“逐行”执行,而是逐条执行。此外,您对“口译员翻译”的想法很奇怪,因为在您问题的开头,您是对的,口译员不翻译,而是执行。目前还不清楚,为什么你会在你的问题中间突然改变解释器的概念来做 JIT 编译器的工作。
-
我是初学者。非常感谢您的回答。这是非常有帮助的解释。我不知道我正在通过谷歌搜索学习,在许多地方我发现了“口译员翻译”这个词......感谢您纠正它执行但不翻译。
-
基本上,两者都执行不同的任务,处理相同的源数据。解释器直接执行字节码,而 JIT 编译器将其翻译成本机代码供以后执行(术语 JIT 编译器最初仅指此翻译任务,但如今,优化和翻译通常被认为是不可分割的任务)。因此,当他们在做不同的事情时,会有某种互动,例如必须有一个协议来定义解释器如何停止工作以切换到 JIT 编译器生成的本机代码,以及本机代码如何切换回来……
标签: java jvm interpreter jit