JVM和HotSpot之间的区别?


147

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

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

Answers:


148

Java虚拟机规范中对Java虚拟机的定义进行了定义

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

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

请参阅Java虚拟机实现列表

OpenJDK的是其下热点(和其他许多件JDK如编译器,应用程序接口,工具等)的开源实现开发的一个项目。


25

OpenJDK(开放Java开发工具包)是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项目包括多个组件的- 热点(虚拟机)中,Java类库和javac的Java的compiler.For更多关于它,请访问其网站

Sun / Oracle提供的当前JVM之所以称为HotSpot,是因为它会在代码中(使用代码的地方使用更密集)寻找“实时”优化的热点。从维基百科热点,发布了作为“的Java HotSpot的性能引擎”是台式机和服务器,维护和由Oracle公司分发的Java虚拟机。


听说OpenJDK还使用HotSpot执行代码?真的吗?
贾斯汀

@TheNewIdiot,所以您是说HotSpot是OpenJDK的一部分?还是像上面的答案所示,还有专有的HotSpot?
Pacerier,2014年

@NINC,那么Hotspot既是OracleJDK又是OpenJDK的一部分?热点= JRockit = OracleJDK = OpenJDK?
佩里耶

12

注:AdoptOpenJDK已更名为Adoptium移动到Eclipse基金会在2020-06下旬之后。


JVM和HotSpot之间的区别?

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

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

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

HotSpot是JIT技术的一种实现,它从运行解释开始,并监视应用程序的实际性能。然后选择应用程序的各个部分以完全编译为本机代码并进行缓存,以加快执行速度。HotSpot是 Sun作为商业产品开发的。收购Sun之后, Oracle通过结合其竞争产品 JRockit的重要部分进一步发展了HotSpot。HotSpot现在通过 OpenJDK项目开源,可以免费获得。

由IBM开发的OpenJ9中的另一个这样的实现,现在通过Eclipse Foundation开源并免费提供。一些基于OpenJDK构建的JVM发行版将HotSpot替换为OpenJ9,同时仍使用其他OpenJDK(例如Java SE类库)。例如,在AdoptOpenJDK上可用的预构建发行在某些硬件上提供了HotSpotOpenJ9的选择。

该图显示了HotSpot和JRockit合并的历史,以及AdoptOpenJDK中都提供的OpenJ9。

该图显示了HotSpot和JRockit合并的历史,以及AdoptOpenJDK中都提供的OpenJ9

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

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

众所周知,OpenJ9的启动速度更快,最初的内存使用量更低,而HotSpot可能对于长期运行的应用程序整体上更高效地运行。两者都是备受推崇,陈旧的产品,并且随OpenJDK发行版一起提供。

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

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

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

作为OpenJDK项目的一部分,HotSpot的源代码已得到保存,维护和进一步开发。替代品OpenJ9Eclipse Foundation容纳,维护和进一步开发,同时在某些OpenJDK发行版中替代了HotSpot。

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

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

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

选择Java供应商的动机


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,内部版本b147中,并具有活跃的开发社区。

有关更多信息,请转到:https : //www.java.net/

编码愉快!


7

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

免费和开源实施

  • HotSpot,主要参考Java VM实现

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

专有实现

  • Oracle为Linux,Windows和Solaris收购的JRockit(最初来自上诉虚拟机)

有关更多实现的
链接,介绍了HotSpot和JRocket之间的区别


-25

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.