首页 > 解决方案 > 除了缓存指令之外,解释器生成的本机代码和 JIT 之间有什么区别吗?

问题描述

我无法理解解释器和 JIT 之间的区别。例如,从这个答案

JVM是Java虚拟机——运行/解释/翻译字节码成本机机器码

JIT 是即时编译器——在运行时将给定的字节码指令序列编译为机器码,然后再本地执行。它的主要目的是对性能进行大量优化。

两者都产生本机机器代码。然后,从另一个答案

解释器为每条指令动态生成并执行机器代码指令,而不管它之前是否已经执行过。JIT 缓存先前已解释为机器代码的指令,并重用那些本机机器代码指令。

正如我所看到的,解释器与 JIT 类似,它也将字节码转换为本机代码,不同之处在于 JIT 执行一些优化,如缓存。

这是正确的吗?还有其他主要区别吗?

标签: javajvminterpreterjit

解决方案


我认为上述定义不一定正确。

解释器将其 翻译成机器代码并不是“强制性的”或“必要的” 。

本质上,解释器解释. 它找到一个循环,然后“运行”该循环。这创建执行循环的机器代码不同。


推荐阅读