Hotspot JVM是否将代码编译为机器代码或仅运行它

时间:2014-12-09 12:53:42

标签: java jvm jit

为简化问题,我们假设在我们的JRE中我们有一个不使用JIT的Hotspot JVM实现。 这意味着我们不会预先编译机器代码。

我试图理解,JVM遇到字节代码时,解释器是否使用Hotspot编译器将代码编译为机器代码,然后JVM才能运行代码? 或者解释器是否只是运行代码,因为JVM具有与每个字节代码命令对应的某种本机方法?

1 个答案:

答案 0 :(得分:3)

  

这意味着我们不会预先编译机器代码。

您的上述句子表明您对JIT编译器的误解。它不是提前编译代码,而是及时编译代码,因此它的名称。

这使得你的问题的其余部分更难理解,因为“HotSpot编译器”是JIT编译器。

但是,为此总结一下:在正常情况下,HotSpot首先解释字节码,然后JIT编译那些运行时分析数据表明它们是“热点”的部分,执行很多(默认阈值是一段代码的10,000次传递。)

如果禁用JIT编译,HotSpot确实只会解释所有Java字节码。