JVM、JDK、JRE 和 OpenJDK 之间有什么区别?

新手上路,请多包涵

JVMJDKJREOpenJDK 有什么区别?

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

原文由 Alireza 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 915
2 个回答

虚拟机

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

JDK 和 JRE

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

Java 运行时环境 (JRE)

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

Java 开发工具包 (JDK)

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

请注意,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 中删除。

原文由 alain.janinm 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

JRE 是 Java 运行时环境——它包含 JVM 等,是运行 Java 程序所需要的。

JDK 是 Java Development Kit——它是 JRE,但是添加了 javac(这是编译 Java 源代码所需要的)和其他编程工具。

OpenJDK 是一个特定的 JDK 实现。

原文由 hvgotcodes 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题