JVM和HotSpot之间的区别?

2022-08-31 06:28:38

HotSpot到底是什么,它与JVM和OpenJDK有什么关系?它是一个图书馆吗?它到底有什么作用?

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


答案 1

Java 虚拟机的确切定义在 Java 虚拟机规范中有所说明

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

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

请参见 Java 虚拟机实现列表

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


答案 2

注意:AdoptOpenJDK在2020-06年底搬到Eclipse基金会后,已更名为Adoptium


JVM和HotSpot之间的区别?

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

在运行时,字节码必须从虚构的指令集转换为主机 CPU 的实际指令集。这可以由口译员即时完成。或者,字节码可以完全编译和缓存,以比通过解释器运行得更快,在称为实时(JIT)编译的过程中。

几十年来,JVM已经有许多实现。大多数人已经消失了。

HotSpot 是 JIT 技术的一种实现,它从运行解释型开始,并观察应用的实际性能。然后,选择将应用的各个部分完全编译为本机代码并进行缓存,以便更快地执行。HotSpot是在Sun作为商业产品开发的。在收购Sun之后,甲骨文通过结合其竞争产品JRockit的重要部分,进一步发展了HotSpot。HotSpot现在通过OpenJDK项目开源,免费提供。

OpenJ9中的另一个这样的实现,由IBM开发,现在通过Eclipse基金会开源,并免费提供。一些基于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和OpenJDK有什么关系?它是一个图书馆吗?它到底有什么作用?

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

OpenJ9通常以最初启动速度更快和内存使用率低得多而闻名,而对于长时间运行的应用程序,HotSpot的整体运行效率可能更高。两者都备受推崇,陈旧,并随OpenJDK的发行版一起提供。

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

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

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

HotSpot的源代码作为OpenJDK项目的一部分进行存储,维护和进一步开发。替代方案OpenJ9Eclipse基金会进行安装,维护和进一步开发,同时在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


推荐