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

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

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

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


当前回答

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

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和OracleJDK 11之间的主要区别是稳定性和性能更新。

资料来源:https://www.youtube.com/watch?v=Adv9--6IcQI&t=385

每6个月,两个代码库将同步。但在6个月的窗口期内,OpenJDK将只收到安全更新,而OracleJDK将收到额外的稳定性和性能更新。

考虑到OpenJDK和OracleJDK的更新版本仅每3个月发布一次,这意味着在下一个主要版本发布并升级之前,您将错过(最多)3个月的修复。然而,如果您选择坚持LTS版本,那么商业许可证开始变得更有意义。

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

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=事件

对于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将每三年发布一次,而OpenJDK将每六个月发布一次。Oracle为其版本提供长期支持。另一方面不过,OpenJDK只支持在下一个版本之前对某个版本所做的更改版本发布。Oracle JDK根据Oracle二进制代码许可协议获得许可,而OpenJDK具有GNU通用公共许可证(GNUGPL)版本2,链接异常。Oracle产品具有Flight Recorder、Java Mission Control和应用程序类数据共享功能,而OpenJDK具有字体渲染器功能。此外,Oracle还有更多垃圾收集选项以及更好的渲染器,Oracle JDK由Oracle Corporation完全开发OpenJDK由Oracle、OpenJDK和Java社区开发。然而,像红帽、Azul Systems、IBM、,苹果股份有限公司、SAP AG也积极参与其发展。


从Java 11转向大变革

Oracle将更改其历史上的“BCL”许可证,同时提供开源和商业许可证

Oracle的Java 11工具包在使用-XX:+UnlockCommercialFeatures选项时发出警告,而在OpenJDK版本中,该选项会导致错误Oracle JDK提供了一种配置,用于向“高级管理控制台”工具提供使用日志数据Oracle一直要求第三方加密提供程序由已知证书签名,而OpenJDK中的加密框架具有开放的加密接口,这意味着可以使用哪些提供程序没有限制Oracle JDK 11将继续包括安装程序、品牌和JRE打包,而OpenJDK版本目前以zip和tar.gz文件的形式提供javac–release命令对Java 9和Java 10目标的行为不同,因为Oracle版本中存在一些附加模块java-version和java-fullversion命令的输出将区分Oracle版本和OpenJDK版本



更新日期:2019年8月25日



有关更多详细信息,oracle vs openjdk

我的理解是,OracleJDK不能用于生产,因此我不能合法使用它(不付费),用于我为公司构建的web应用程序。我必须使用OpenJDK。如果我错了,请纠正我!来自本文。

从Java 11开始,Oracle JDK仅限于开发和测试环境。Oracle JDK只能在以下情况下用于生产你购买了商业支持。相反,Oracle将提供Java基于OpenJDK免费构建,可用于生产。但是对于官方的Oracle JDK,真正的路线图如下所示:

更新:我错了。我可以免费使用OracleJDK,但6个月后不会获得安全更新,我们必须承担风险。看看上面链接的文章部分“新发布的列车对我的公司意味着什么?”。