185

HotSpot 到底是什么,它与 JVM 和 OpenJDK 有什么关系?是图书馆吗?它究竟是做什么的?

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

4

6 回答 6

176

Java 虚拟机规范中说明了究竟什么是Java 虚拟机

JVM 根据定义是虚拟机,即模拟真实机器所做的软件机器。和真机一样,它有指令集、虚拟计算机架构和执行模型。它能够运行用这个虚拟指令集编写的代码,就像一台真正的机器可以运行机器代码一样。

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

请参阅Java 虚拟机实现列表

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

于 2013-05-15T15:05:52.363 回答
48

注意:AdoptOpenJDK在 2020-06年末移至 Eclipse 基金会后已更名为Adoptium 。


JVM 和 HotSpot 的区别?

Java虚拟机 (JVM)是从未物理构建为硬件的假想计算机。JVM 运行编译为其虚构指令集的程序,该指令集作为称为字节码的中间表示写入存储。

在运行时,字节码必须从虚拟指令集翻译成主机 CPU 的实际指令集。这可以由口译员即时完成。或者字节码可以被完全编译和缓存,比通过解释器运行得更快,在一个称为即时 (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 合并的历史,以及在 AdoptOpenJDK 中提供的 OpenJ9。

显示 HotSpot 和 JRockit 合并历史的图表,以及在 AdoptOpenJDK 中都可用的 OpenJ9

HotSpot 到底是什么,它与 JVM 和 OpenJDK 有什么关系?是图书馆吗?它究竟是做什么的?

  • HotSpot是 JVM 部分的实现,它解释和/或编译 Java 字节码以在主机 CPU 上执行。
  • OpenJ9是一个替代方案。

OpenJ9通常以更快的启动速度和更低的内存使用量而闻名,而对于长时间运行的应用程序, HotSpot的整体运行效率可能更高。两者都备受推崇、久经考验,并且可用于 OpenJDK 的发行版。

OpenJDK是一个开源项目,它完全实现了定义Java 平台的Java 规范 JSRJEP。我今天知道的每个 JVM 实现都完全或大部分基于 OpenJDK代码库,并使用 HotSpot 或 OpenJ9 技术。

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

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

HotSpot的源代码作为OpenJDK项目的一部分进行存储、维护和进一步开发。替代方案OpenJ9由Eclipse Foundation托管、维护和进一步开发,同时在 OpenJDK 的某些发行版中替换 HotSpot。

一些 Java 技术发行版选择与 HotSpot 一起提供。一些发行版选择用OpenJ9替代OpenJDK代码库中的HotSpot部分。

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

指导您为 Java 11 实施选择供应商的流程图

选择 Java 供应商的动机

于 2019-12-11T22:36:11.593 回答
29

OpenJDK(Open Java Development Kit)是Java平台标准版(Java SE)的免费开源实现。openjdk是由Sun Microsystems发起的一个项目,现在受到许多公司和社区的关注,用于构建Java Development Kit绝对是开源的。根据官方文档

OpenJDK 是 Java 平台标准版 (Java SE) 规范的开源实现。2007 年 5 月,Sun 向 OpenJDK 社区发布了适用于 Java SE 的完全可构建的 Java 开发工具包 (JDK) 版本,作为 GNU 通用公共许可证第二版 (GPLv2) 下的免费软件。Sun 宣布了 OpenJDK 社区的临时管理委员会。Sun 还宣布,基于 OpenJDK 的实现可以使用 Java SE 6 Technical Compatibility Kit (JCK) 来建立与 Java SE 6 规范的兼容性。

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

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

于 2013-05-15T15:00:37.633 回答
8

如上所述,HotSpot 是 Java 虚拟机 (JVM) 概念的跨平台实现,并根据 GNU 通用公共许可证与 OpenJDK(Java 开发人员工具包)一起分发。HotSpot 主要用 C++ 编写,最初是在 Sun Microsystems 下开发的。它目前是在 OpenJDK 项目下开发的,位于 www.java.net。HotSpot JVM 作为 Java 1.2 的附加组件提供,后来在 Java 1.3 中用作默认的 Sun JVM。JVM 目前处于第 7 版,Build b147,并且有一个活跃的开发社区支持它。

欲了解更多信息,请访问: https ://www.java.net/

快乐编码!

于 2014-06-22T19:10:34.317 回答
7

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

免费和开源的实现

  • HotSpot,主要参考 Java VM 实现

  • OpenJDK — Open Java Development Kit 是一个免费的开源实现,在 GNU 通用公共许可证 (GNU GPL) 下获得许可,但有一个链接例外。

专有实现

  • JRockit(最初来自 Appeal Virtual Machines)被 Oracle 收购,用于 Linux、Windows 和 Solaris

更多实现
链接解释了 HotSpot 和 JRocket 之间的差异

于 2015-07-21T06:33:04.930 回答
-27

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

于 2016-03-30T13:54:07.287 回答