Jvm JIT和Hotspot - 有什么区别

时间:2011-07-27 21:35:22

标签: java compiler-construction jvm jit jvm-hotspot

我听说这些术语正在使用,但我似乎无法在Java框架中找到它们在哪里一致的顶级视图。我知道JIT是一个编译机制,但它是JVM的一部分吗? 什么是热点?它是一种新型VM吗?

3 个答案:

答案 0 :(得分:11)

JIT是“及时”编译,基本上是在动态编译。

Hotspot是JVM中的概念,它只编译实际使用的代码。也就是说,反复使用的“热门”代码片段。

JVM跟踪使用情况,当某些内容变得足够流行时,它会将该代码排队等待编译,同时继续解释代码。

当JIT完成时,它用编译的位交换解释的位。

这就是为什么JVM需要“热身”进行基准测试等等。

Sun / Oracle JVM的-server和-client选项会影响这种行为,即它们在执行JIT工作时的积极程度。

答案 1 :(得分:10)

JVM是一个规范。不同的供应商实施规范。例如:Sun(现在的Oracle),IBM,BEA(现在的Oracle),SAP都实现了规范并提供了自己的JVM。 Sun的具体实现称为Hotspot。 BEA被称为JRockit。

JIT是JVM的一部分,它接受Java字节码并将其编译为运行程序的机器上的本机处理器汇编代码。每个供应商都使用独特的复杂算法实现JIT。例如:JRockit上的JIT与Hotspot的JIT不同。

答案 2 :(得分:7)

HotSpot is the name of a particular JVM。它具有JIT编译器,就像今天的大多数JVM一样,但是JVM是否具有JVM编译器是一个(相当广泛,公开宣传且重要,但仍然是)实现细节。有没有JIT编译器的Java实现,它们只是标准的编译。

“热点”也是一段经常被调用的代码或者执行的时间不成比例(这可能就是JVM的名字来源,就像许多JIT一样 - 旨在加速那些“特别是热点。