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

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

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

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


当前回答

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

·是的,垃圾收集和其他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虚拟机列表

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

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

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

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

对于Java 8、Oracle JDK与OpenJDK,我的主要区别是:

OpenJDK是Java Standard Edition平台的开源实现,Oracle和开放Java社区对此做出了贡献。OpenJDK根据许可证GPL v2发布,其中Oracle JDK根据Oracle二进制代码许可协议获得许可。实际上,OracleJDK的构建过程是从OpenJDK源代码构建的。因此,OracleJDK和OpenJDK之间没有主要的技术差异。除了基本代码之外,OracleJDK还包括Oracle的Java插件和Java WebStart的实现。它还包括第三方开源和开源组件,如图形光栅化器和Rhino。OpenJDK字体渲染器和Oracle JDK飞行记录器是Oracle JDK和OpenJDK之间显著的主要区别。Rockit是Oracle的JVM,从JavaSE7、HotSpot和JRockit合并为一个JVM。所以现在我们只有合并的HotSpot JVM可用。有些情况下,人们声称他们在运行OpenJDK时遇到了问题,当切换到OracleJDK时,问题得到了解决。Twitter有自己的JDK。像Minecraft这样的软件希望使用Oracle JDK。事实上,他警告说。

有关差异的完整列表,请参阅源文章:Oracle JDK与OpenJDK和Java 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

除了明显的许可差异外,OpenJDK和OracleJDK 11之间的主要区别是稳定性和性能更新。

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

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

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