JVM,JDK,JRE和OpenJDK之间有什么区别?JVMJDK 和 JREOpenJDKJDK 11 的更新

2022-08-31 04:47:30

JVMJDKJREOpenJDK之间有什么区别?

我用Java编程,我遇到了这些短语,它们之间有什么区别?


答案 1

JVM

Java 虚拟机 (JVM) 是运行 Java 字节码的虚拟机。JVM不理解Java源代码;这就是为什么您需要编译文件以获取包含JVM理解的字节码的文件。它也是允许Java成为“可移植语言”(一次编写,在任何地方运行)的实体。事实上,JVM有针对不同系统(Windows,Linux,macOS,参见维基百科列表)的特定实现,目的是使用相同的字节码,它们都给出相同的结果。*.java*.class

JDK 和 JRE

要解释JDK和JRE之间的区别,最好是阅读Oracle文档并参考图表:

Java Runtime Environment (JRE)

Java 运行时环境 (JRE) 提供了库、Java 虚拟机和其他组件,用于运行用 Java 编程语言编写的小程序和应用程序。此外,JRE还有两个关键的部署技术:Java插件,它使小程序能够在流行的浏览器中运行;和 Java Web Start,它通过网络部署独立应用程序。它也是 Java 2 平台企业版 (J2EE) 中用于企业软件开发和部署的技术的基础。JRE 不包含用于开发小程序和应用程序的工具和实用程序,如编译器或调试器。

Java Development Kit (JDK)

JDK 是 JRE 的超集,包含 JRE 中的所有内容,以及开发小程序和应用程序所需的编译器和调试器等工具。

请注意,Oracle并不是唯一一个提供JDK的公司。

OpenJDK

OpenJDK是JDK的开源实现,也是Oracle JDK的基础。Oracle JDK和OpenJDK之间几乎没有区别。

这些差异在此博客中进行了说明:

问:在 OpenJDK 存储库中找到的源代码与您用于构建 Oracle JDK 的代码有什么区别?

答:它非常接近 - 我们的Oracle JDK版本的构建过程建立在OpenJDK 7上,只需添加几个部分,例如部署代码,其中包括Oracle的Java插件和Java WebStart的实现,以及一些闭源第三方组件,如图形光栅器,一些开源第三方组件, 像Rhino,以及这里和那里的一些零碎的东西,比如额外的文档或第三方字体。展望未来,我们的目的是开源Oracle JDK的所有部分,除了那些我们认为是商业功能的部分,如JRockit Mission Control(在Oracle JDK中尚未提供),并用开源替代品替换受累的第三方组件,以实现代码库之间更紧密的奇偶校验。

JDK 11 的更新

唐纳德·史密斯(Donald Smith)的一篇文章试图消除Oracle JDK和Oracle的OpenJDK之间的区别:https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

正如@Alan Evangelista的评论中提到的,Java Web Start已被Oracle在Java SE 9中弃用,并在Java SE 11中删除。


答案 2

JVM是Java虚拟机 - 它实际上运行Java字节码。

JRE是Java运行时环境 - 它包含一个JVM,除其他外,并且是运行Java程序所需的。

JDK是Java开发工具包 - 它是JRE,但添加了javac(这是编译Java源代码所需的)和其他编程工具。

OpenJDK是一个特定的JDK实现。


推荐