我听说过这些术语的使用,但我似乎无法找到它们在 Java 框架中的整体组合的顶层视图。我知道JIT是一种编译机制,但它是JVM的一部分吗? 什么是热点?这是某种新型虚拟机吗?
JVM是一个规范。不同的供应商实施该规范。例如:Sun(现在的 Oracle)、IBM、BEA(现在的 Oracle)、SAP 都实现了该规范并提供了自己的 JVM。 Sun的具体实现称为Hotspot。 BEA 的名称为 JRockit。
JIT 是 JVM 的一部分,它获取 Java 字节码并将其编译为运行程序的机器上的本机处理器汇编代码。每个供应商都利用独特的复杂算法来实现 JIT。例如:JRockit 上的 JIT 与 Hotspot 的 JIT 不同。
JIT 是“Just In Time”编译,基本上是动态编译。
热点是 JVM 中的概念,它只编译实际使用的代码。也就是说,“热门”代码片段被反复使用。
JVM 跟踪使用情况,当某些东西变得足够流行时,它会将代码排队等待编译,同时继续解释代码。
当 JIT 完成时,它会将解释的位与编译的位交换。
这就是 JVM 需要“预热”以进行基准测试等的原因。
Sun/Oracle JVM 的 -server 和 -client 选项会影响这种行为,即它们在执行 JIT 工作时的积极程度。
HotSpot 是特定 JVM 的名称。它具有 JIT 编译器,就像当今大多数 JVM 一样,但 JVM 是否具有 JIT 编译器是一个(相当广泛、公开宣传且重要,但仍然是一个)实现细节。已经有一些没有 JIT 编译器的 Java 实现,并且它们与标准兼容。
“热点”也是一段被频繁调用或需要花费不成比例的大量时间来执行的代码(这可能是 JVM 名称的由来,因为它像许多 JIT 一样)旨在加速这些“热点” “特别是)。