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