JVM和HotSpot之间的区别是什么?

221

什么是HotSpot,它与JVM和OpenJDK有什么关系?它是一个库吗?它具体做了什么?

此外,OpenJDK和HotSpot之间有什么区别?

6个回答

205

Java虚拟机的定义在Java虚拟机规范中说明。

JVM被定义为一种虚拟机,即一种模拟实际机器工作的软件。与实际机器一样,它有一个指令集、虚拟计算机架构和执行模型。它能够运行用这个虚拟指令集编写的代码,就像实际机器可以运行机器码一样。

HotSpot是JVM概念的一种实现。它最初由Sun开发,现在归Oracle所有。还有其他JVM规范的实现,如JRockitIBM J9等。

请参阅Java虚拟机实现列表

OpenJDK是一个项目,旨在开发HotSpot的开源实现(以及JDK的许多其他部分,如编译器、API、工具等)。


82
注意:AdoptOpenJDK在2020年6月底加入Eclipse基金会后更名为Adoptium。
JVM和HotSpot之间的区别是什么?
JVM(Java虚拟机)是一台从未以硬件形式构建的虚拟计算机。JVM运行编译为其虚拟指令集的程序,这些指令集以中间表示形式(即字节码)写入存储器。
在运行时,字节码必须从虚拟指令集转换为主机机器的实际指令集。这可以通过解释器实时完成。或者字节码可以完全编译缓存,以比通过解释器运行更快,这个过程被称为即时编译(JIT)
几十年来,已经有许多JVM的实现。大多数已经逐渐消失。 HotSpot是JIT技术的一种实现,它首先以解释方式运行,并监视应用程序的实际性能。然后选择应用程序的部分进行完全编译为本机代码并缓存,以实现更快的执行速度。HotSpot最初是在Sun开发的商业产品。在收购Sun之后,Oracle通过结合其竞争产品JRockit的重要部分进一步发展了HotSpot。现在,HotSpot通过OpenJDK项目开源,并可免费使用。
OpenJ9中的另一个实现是由IBM开发的,并通过Eclipse Foundation开源,并可免费使用。一些基于OpenJDK构建的JVM发行版将HotSpot替换为OpenJ9,同时仍使用OpenJDK的其他部分,如Java SE类库。例如,在AdoptOpenJDK提供的预构建发行版中,您可以选择在某些硬件上使用HotSpotOpenJ9
图表显示了HotSpot和JRockit合并的历史,以及OpenJ9在AdoptOpenJDK中的两者都可用。

Diagram showing history of HotSpot & JRockit merging, and OpenJ9 both available in AdoptOpenJDK

HotSpot是JVM的一部分实现,它解释和/或编译Java字节码以在主机CPU上执行。它不是一个库,而是一个虚拟机的实现。OpenJ9是另一种选择。OpenJ9通常以更快的启动速度和更低的初始内存使用量而闻名,而HotSpot可能在长时间运行的应用程序中更高效。两者都备受推崇,都可以在OpenJDK的发行版中使用。

OpenJDK 是一个开源项目,完全实现了Java规范JSRJEP,这些定义了Java平台。主要贡献者包括Oracle、IBM、Apple和其他公司。

我所知道的每个JVM实现都完全或大部分基于OpenJDK的代码库,并使用HotSpot或OpenJ9技术。

除了JVM,OpenJDK还提供了所有Java SE规范所需的类的源代码实现,例如java.langjava.utiljava.time和其他包。

另外,OpenJDK和HotSpot有什么区别?

< p > HotSpot 的源代码作为 OpenJDK 项目的一部分进行存储、维护和进一步开发。而另一种选择,OpenJ9,则由 Eclipse Foundation 进行存储、维护和进一步开发,有时会在一些 OpenJDK 的发行版中取代 HotSpot。

一些 Java 技术的发行版选择使用 HotSpot。而一些发行版则选择用替代品 OpenJ9 替换 OpenJDK 代码库中的 HotSpot 部分。

以下是一个流程图,帮助您选择 Java 平台发行版的供应商。

Flowchart guiding you in choosing a vendor for a Java 11 implementation

Motivations in choosing a vendor for Java


8
非常有帮助的答复。谢谢您。 - Dulaj Kulathunga
现在我真希望Stack Overflow上的所有答案都能这么详细。 - undefined

33

OpenJDK(Open Java Development Kit)是Java平台标准版(Java SE)的免费开源实现。openjdk是由Sun Microsystems发起的项目,如今由许多公司和社区负责构建完全开源的Java开发工具包。根据官方文档所述。

OpenJDK是Java平台标准版(Java SE)规范的开源实现。 2007年5月,Sun以GNU通用公共许可证第二版(GPLv2)的自由软件形式向OpenJDK社区发布了Java SE的完全可构建的Java开发工具包(JDK)版本。 Sun宣布了OpenJDK社区的临时治理委员会。 Sun还宣布,基于OpenJDK的实现可以使用Java SE 6技术兼容性套件(JCK)来确立与Java SE 6规范的兼容性。

OpenJDK项目由多个组件组成- HotSpot(虚拟机)、Java类库和javac Java编译器。有关更多信息,请访问其网站

Sun / Oracle提供的当前JVM称为HotSpot,因为它在代码中寻找使用热点(代码更密集使用的地方)进行“即时”优化。根据维基百科HotSpot作为“Java HotSpot性能引擎”发布,是一种用于桌面和服务器的Java虚拟机,由Oracle Corporation维护和分发。


1
我听说OpenJDK也使用HotSpot来执行代码?这是真的吗? - Justin
@TheNewIdiot,你是在说HotSpot是OpenJDK的一部分吗?还是像上面的回答所建议的那样,也有专有的HotSpot? - Pacerier
@NINC,所以Hotspot既是OracleJDK的一部分,也是OpenJDK的一部分?Hotspot = JRockit = OracleJDK = OpenJDK? - Pacerier

9
热点(HotSpot)是跨平台的Java虚拟机(JVM)概念的实现,如上所述,它与OpenJDK(Java开发工具包)一起发布,遵循GNU通用公共许可协议。 HotSpot主要用C++编写,最初由Sun Microsystems开发。目前,在www.java.net上OpenJDK项目下继续开发。 HotSpot JVM在Java 1.2中作为附加组件提供,并在Java 1.3中被用作默认的Sun JVM。JVM目前处于版本7,构建b147,并拥有一个积极的开发社区。
有关更多信息,请访问: https://www.java.net/ 愉快的编码!

8
JVM是一个抽象机器(规范)。HotSpot、OpenJDK和JRockit等是JVM的实现。

免费和开源的实现
  • 主要参考Java VM实现:HotSpot
  • OpenJDK是一个免费且开源的实现,根据GNU通用公共许可证(GNU GPL)授权,并带有链接例外。

专有实现
  • 最初来自Appeal Virtual Machines的JRockit已被Oracle收购,并针对Linux、Windows和Solaris进行了优化。

请查看此链接以获取更多实现信息。此链接介绍了HotSpot和JRocket之间的差异。

-32

HotSpot是一种高级的C++黑客技术,为了使用它,您必须针对它进行构建,以便编译甚至最简单的东西。除非您调整编译器或从头开始编写编译器。 HotSpot基本上是一种将源代码转换为C++代码,然后编译为本地代码的方法,因此术语jit编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接