JVM、JDK、JRE之间有什么区别OpenJDK
我用Java编程时遇到了这些短语,它们之间有什么区别
虚拟机
Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM不理解Java源代码;这就是为什么您需要编译*.java文件来获得*.class文件,其中包含JVM可以理解的字节码。它也是允许Java成为“一个”的实体;“可移植语言”;(写一次,在任何地方运行)。事实上,JVM在不同的系统(Windows、Linux、macOS,查看维基百科列表,目的是使用相同的字节码,它们都给出相同的结果
JDK和JRE
要解释JDK和JRE之间的区别,最好阅读https://www.oracle.com/technetwork/java/javase/tech/index-jsp-140763.html“rel=”nofollow noreferrer“>Oracle文档并参考图表:
Java运行时环境(JRE)
Java运行时环境(JRE)提供了库、Java虚拟机和其他组件来运行用Java编程语言编写的小程序和应用程序。此外,两项关键部署技术是JRE的一部分:Java插件,它使小程序能够在流行浏览器中运行;以及JavaWebStart,它通过网络部署独立的应用程序。它也是java 2平台、企业版(J2EE)技术在企业软件开发和部署中的基础。JRE不包含用于开发小程序和应用程序的工具和实用程序,如编译器或调试器
Java开发工具包(JDK)
JDK是JRE的超集,包含JRE中的所有内容,以及开发小程序和应用程序所需的编译器和调试器等工具
请注意,Oracle并不是唯一提供JDK的公司
OpenJDK
OpenJDK是JDK的开源实现,也是Oracle JDK的基础。Oracle JDK和OpenJDK之间几乎没有区别
差异在此博客:
问:OpenJDK存储库中的源代码与用于构建Oracle JDK的代码之间有什么区别
答:非常接近——我们的Oracle JDK版本构建过程只添加了几部分,比如部署代码,其中包括Oracle实现的Java插件和Java WebStart,以及一些封闭源代码的第三方组件,如图形光栅化器、一些开放源代码的第三方组件,比如Rhino,还有一些零碎的东西,比如附加文档或第三方字体。向前看,我们的意图是打开Oracle JDK的所有片断,除了那些我们考虑的商业特性,例如JROKIT任务控制(在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中删除