注:此问题来自2014年。截至Java 11 OpenJDK和OracleJDK正在融合。
Oracle和OpenJDK之间有什么关键的区别吗?
例如,垃圾收集和其他JVM参数是否相同?
GC在两者之间的工作方式不同吗?
注:此问题来自2014年。截至Java 11 OpenJDK和OracleJDK正在融合。
Oracle和OpenJDK之间有什么关键的区别吗?
例如,垃圾收集和其他JVM参数是否相同?
GC在两者之间的工作方式不同吗?
当前回答
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虚拟机列表
其他回答
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版本。
我的理解是,OracleJDK不能用于生产,因此我不能合法使用它(不付费),用于我为公司构建的web应用程序。我必须使用OpenJDK。如果我错了,请纠正我!来自本文。
从Java 11开始,Oracle JDK仅限于开发和测试环境。Oracle JDK只能在以下情况下用于生产你购买了商业支持。相反,Oracle将提供Java基于OpenJDK免费构建,可用于生产。但是对于官方的Oracle JDK,真正的路线图如下所示:
更新:我错了。我可以免费使用OracleJDK,但6个月后不会获得安全更新,我们必须承担风险。看看上面链接的文章部分“新发布的列车对我的公司意味着什么?”。
未来的一个关键区别是发布时间表和支持政策。
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=事件
OpenJDK
OpenJDK是开放源代码,由Oracle维护和开发,但允许社区和其他公司参与此开发,例如Red Hat、Azul Systems、IBM、Apple Inc等。OpenJDK既是JDK产品,也是规范,任何希望使用OpenJDK创建新变体的公司或组织都必须遵守这些规范。OpenJDK是由Oracle和社区贡献开发的。我们有时会对其稳定性产生问题;然而,根据用户的反馈,它将进行升级,以提高性能。OpenJDK定期更新,大约每6个月更新一次。
Oracle JDK
Oracle JDK由Oracle维护和开发。它符合OpenJDK规范,但不是开放源代码。OracleJDK在JVM响应能力和生产力方面要好得多。由于其对公司客户的重要性,它更注重稳定性。
资料来源:https://o7planning.org/12571/history-of-java-and-the-difference-between-oracle-jdk-and-openjdk
对于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中),并用开源替代方案,以实现代码之间更接近的对等性基础。