【问题标题】:Difference between JVM and HotSpot?JVM 和 HotSpot 的区别?
【发布时间】:2013-05-15 14:48:44
【问题描述】:

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

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

【问题讨论】:

    标签: java jvm-hotspot


    【解决方案1】:

    什么是 Java 虚拟机的定义在 Java Virtual Machine Specification 中有说明

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

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

    见List of Java Virtual Machine Implementations

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

    【讨论】:

      【解决方案2】:

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


      JVM 和 HotSpot 的区别?

      Java Virtual Machine (JVM) 是一台从未物理构建为硬件的假想计算机。 JVM 运行编译为其虚构的 instruction set 的程序,并以 intermediate representation 的形式写入存储,称为 bytecode。

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

      几十年来,有很多implementations of the JVM。大部分都掉了。

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

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

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

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

      • HotSpot 是 JVM 部分的实现,它解释和/或编译 Java 字节码以在主机 CPU 上执行。
      • OpenJ9 是另一种选择。

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

      OpenJDK 是一个开源项目,它完全实现了定义the Java platform 的Java Specifications、JSRs 和JEPs。我今天知道的每个 JVM 实现都完全或大部分基于 OpenJDK codebase,并使用 HotSpot 或 OpenJ9 技术。

      除了 JVM,OpenJDK 还为 Java SE 规范要求的所有类提供了源代码实现,例如 java.lang、java.util、java.time 等包。

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

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

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

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

      【讨论】:

      • 非常有帮助的答案。谢谢先生
      【解决方案3】:

      OpenJDK (Open Java Development Kit) 是 Java 平台标准版 (Java SE) 的免费开源实现。openjdk 是由 Sun Microsystems 发起的项目,如今受到许多人的关注公司和社区以绝对开源的方式构建 Java 开发工具包。根据official documentation。

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

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

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

      【讨论】:

      • 听说OpenJDK也使用HotSpot来执行代码?这是真的吗?
      • @TheNewIdiot,所以你是说 HotSpot 是 OpenJDK 的一部分?还是如上面的答案所示,还有一个专有的 HotSpot?
      • @NINC,所以 Hotspot 是 OracleJDK 和 OpenJDK 的一部分?热点 = JRockit = OracleJDK = OpenJDK?
      【解决方案4】:

      如上所述,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/

      编码愉快!

      【讨论】:

        【解决方案5】:

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

        免费和开源实现

        • HotSpot,主要参考 Java VM 实现

        • OpenJDK — 开放式 Java 开发工具包是根据 GNU 通用公共许可证(GNU GPL) 有一个链接异常。

        专有实现

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

        更多 implementations
        link 解释 HotSpot 和 JRocket 之间的区别

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-04
            • 1970-01-01
            相关资源
            最近更新 更多