可能在看这个问题之前很多人和我一样并没有接触和使用过OpenJDK。那么OracleJDK和OpenJDK之间是否存在重大差异?下面我通过收集到的一些资料,为你解答这个被很多人忽视的问题。 对于Java7,没什么关键的地方。OpenJDK项目主要基于Sun捐赠的HotSpot源代码。此外,OpenJDK被选为Java7的参考实现,由Oracle工程师维护。关于JVM,JDK,JRE和OpenJDK之间的区别,Oracle博客帖子在2012年有一个更详细的答案:问:OpenJDK存储库中的源代码与用于构建OracleJDK的代码之间有什么区别? 答:非常接近我们的OracleJDK版本构建过程基于OpenJDK7构建,只添加了几个部分,例如部署代码,其中包括Oracle的Java插件和JavaWebStart的实现,以及一些闭源的第三方组件,如图形光栅化器,一些开源的第三方组件,如Rhino,以及一些零碎的东西,如附加文档或第三方字体。展望未来,我们的目的是开源OracleJDK的所有部分,除了我们考虑商业功能的部分。 总结:(提示:下面括号内的内容是基于原文补充说明的,因为原文太过于晦涩难懂,用人话重新解释了下,如果你看得懂里面的术语,可以忽略括号解释的内容)OracleJDK大概每6个月发一次主要版本(从2014年3月JDK8LTS发布到2017年9月JDK9发布经历了长达3年多的时间,所以并不总是6个月),而OpenJDK版本大概每三个月发布一次。但这不是固定的,我觉得了解这个没啥用处。详情参见:https:blogs。oracle。comjavaplatformgroupupdateandfaqonthejavasereleasecadence。OpenJDK是一个参考模型并且是完全开源的,而OracleJDK是OpenJDK的一个实现,并不是完全开源的;(个人观点:众所周知,JDK原来是SUN公司开发的,后来SUN公司又卖给了Oracle公司,Oracle公司以Oracle数据库而著名,而Oracle数据库又是闭源的,这个时候Oracle公司就不想完全开源了,但是原来的SUN公司又把JDK给开源了,如果这个时候Oracle收购回来之后就把他给闭源,必然会引起很多Java开发者的不满,导致大家对Java失去信心,那Oracle公司收购回来不就把Java烂在手里了吗!然后,Oracle公司就想了个骚操作,这样吧,我把一部分核心代码开源出来给你们玩,并且我要和你们自己搞的JDK区分下,你们叫OpenJDK,我叫OracleJDK,我发布我的,你们继续玩你们的,要是你们搞出来什么好玩的东西,我后续发布OracleJDK也会拿来用一下,一举两得!)OpenJDK开源项目:https:github。comopenjdkjdkOracleJDK比OpenJDK更稳定(肯定啦,OracleJDK由Oracle内部团队进行单独研发的,而且发布时间比OpenJDK更长,质量更有保障)。OpenJDK和OracleJDK的代码几乎相同(OpenJDK的代码是从OracleJDK代码派生出来的,可以理解为在OracleJDK分支上拉了一条新的分支叫OpenJDK,所以大部分代码相同),但OracleJDK有更多的类和一些错误修复。因此,如果您想开发企业商业软件,我建议您选择OracleJDK,因为它经过了彻底的测试和稳定。某些情况下,有些人提到在使用OpenJDK可能会遇到了许多应用程序崩溃的问题,但是,只需切换到OracleJDK就可以解决问题;在响应性和JVM性能方面,OracleJDK与OpenJDK相比提供了更好的性能;OracleJDK不会为即将发布的版本提供长期支持(如果是LTS长期支持版本的话也会,比如JDK8,但并不是每个版本都是LTS版本),用户每次都必须通过更新到最新版本获得支持来获取最新版本;OracleJDK使用BCLOTN协议获得许可,而OpenJDK根据GPLv2许可获得许可。既然OracleJDK这么好,那为什么还要有OpenJDK? 答: OpenJDK是开源的,开源意味着你可以对它根据你自己的需要进行修改、优化,比如Alibaba基于OpenJDK开发了Dragonwell8:https:github。comalibabadragonwell8 OpenJDK是商业免费的(这也是为什么通过yum包管理器上默认安装的JDK是OpenJDK而不是OracleJDK)。虽然OracleJDK也是商业免费(比如JDK8),但并不是所有版本都是免费的。 OpenJDK更新频率更快。OracleJDK一般是每6个月发布一个新版本,而OpenJDK一般是每3个月发布一个新版本。(现在你知道为啥OracleJDK更稳定了吧,先在OpenJDK试试水,把大部分问题都解决掉了才在OracleJDK上发布) 基于以上这些原因,OpenJDK还是有存在的必要的! 拓展一下:BCL协议(OracleBinaryCodeLicenseAgreement):可以使用JDK(支持商用),但是不能进行修改。OTN协议(OracleTechnologyNetworkLicenseAgreement):11及之后新发布的JDK用的都是这个协议,可以自己私下用,但是商用需要付费。