注:此问题来自2014年。截至Java 11 OpenJDK和OracleJDK正在融合。

Oracle和OpenJDK之间有什么关键的区别吗?

例如,垃圾收集和其他JVM参数是否相同?

GC在两者之间的工作方式不同吗?


当前回答

对于Java 8,AMIS技术博客于2018年11月发布了一个针对各种JVM上托管的反应式(非阻塞)Spring Boot REST应用程序的有趣性能基准,该基准显示了以下差异:

OpenJDK的CPU使用率高于OracleJDK,OpenJDK的响应时间略低于OracleJDK,OpenJDK的内存使用率高于OracleJDK,

有关详细信息,请参阅源文章。

当然,YMMV,这只是基准之一。

其他回答

未来的一个关键区别是发布时间表和支持政策。

OpenJDK

OpenJDK将每6个月发布一次功能版本,只有在下一个功能版本之前才受支持。它本质上是针对开发人员的连续发布流。

Oracle JDK

Oracle JDK更多地面向看重稳定性的企业受众。它基于OpenJDK版本之一,但然后给予长期支持(LTS)。Oracle JDK计划每3年发布一次。

资料来源:https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-社交&size=事件

它非常接近-我们的Oracle JDK版本的构建过程是在OpenJDK 7上构建的,只添加了几个部分,如部署代码,其中包括Oracle的Java插件和Java WebStart的实现,以及一些封闭源代码的第三方组件,如图形光栅化器,一些开源第三方部件,如Rhino,如其他文档或第三方字体。接下来,我们打算开源OracleJDK的所有部分,除了那些我们认为具有商业功能的部分,如JRockit任务控制(在OracleJDK中尚不可用),并用开源替代品替换受阻碍的第三方组件,以实现代码库之间的更接近对等。

·是的,垃圾收集和其他JVM参数是相同的。

·GC的性能在两者中都是相同的。

对于Java7,没有什么重要的。OpenJDK项目主要基于Sun捐赠的HotSpot源代码。

此外,OpenJDK被选为Java7的参考实现,并由Oracle工程师维护。

2012年,关于JVM、JDK、JRE和OpenJDK之间的区别,有一个更详细的答案,链接到Oracle博客文章:

Q: OpenJDK中的源代码有什么不同存储库,以及用于构建Oracle JDK的代码?A: 它非常接近-我们的Oracle JDK版本构建过程在OpenJDK7上,其中包括Oracle对Java插件和Java的实现WebStart以及一些封闭源代码的第三方组件,如图形光栅化器,一些开源第三方组件,如犀牛,还有一些零碎的东西文档或第三方字体。继续前进,我们的目标是开源OracleJDK的所有部分,我们考虑的除外商业功能,如JRockit任务控制(尚未提供在Oracle JDK中),并用开源替代方案,以实现代码之间更接近的对等性基础。

Oracle JDK 11和OpenJDK 11之间剩下的几个外观和包装差异可以在这篇博文中找到:

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

简而言之:

Oracle JDK 11在使用-XX:+UnlockCommercialFeatures选项时发出警告,它可以配置为向“高级管理控制台”工具提供使用日志数据,它总是要求第三方密码提供者由已知证书签名,它将继续包括安装程序、品牌和JRE打包,而javac-release命令对于Java 9和Java 10目标的行为略有不同,并且java-version和java-fullversion命令的输出将区分OracleJDK版本和OpenJDK版本。

OpenJDK和Oracle JDK目前都仅由Oracle创建和维护。

OpenJDK和OracleJDK是通过TCK(Java技术认证工具包)的同一Java规范的实现。

JDK的大多数供应商都是在OpenJDK的基础上编写的,他们在不破坏TCK兼容性的情况下对组件进行了一些调整[主要是为了替换许可的专有部件/替换为仅适用于特定OS的更高性能的项目]。

许多供应商实现了Java规范并通过了TCK。例如,IBM J9、Azul Zulu、Azul Zing和Oracle JDK。

几乎所有现有的JDK都源自OpenJDK。

正如许多人所建议的那样,许可证是JDK之间的一种变化。

从JDK 11开始访问长期支持Oracle JDK/Java SE,现在需要商业许可证。现在您应该注意您正在安装的JDK,因为没有订阅的OracleJDK可能会停止工作。来源

参考:Java虚拟机列表