OracleJDK 17真的香?
一、前言
2021年9月14日,Oracle继JDK 8u202永久免费版本后,推出OracleJDK 17免费版本(目前免费3年),一改JDK 8u202到JDK17版本间的商业生产收费之态,用户不仅可以在内部使用,也可以发送给客户使用(符合美国进出口管制情况下),具体条文见:Java 17 available now。但有趣的是,在Oracle的FAQ中指出:JDK17之后的版本都会遵守NFTC协议(免费),但是有时间期限,免费期之后会收费(OTN),所以OracleJDK 17 真的香吗?看官请移眼往下看。
- 1.1、JVM-Ecosystem-Report-2018
- 1.2、JVM-Ecosystem-eport-2020
根据snyk关于JVM生态2018年与2020年的调查(详情可看文章参考),可以看出OracleJDK用户持续下降(70%—>24%),同时JDK用户对收费大多持不支持态度(86%)。因此,OracleJDK17的推出,不无可能是Oracle不想放弃JDK收费的机会,但是迫于JDK用户的急剧下降,才推出如此版本的。
Oracle JDK的许可:
另外,大家需要知道的是OracleJDK17的免费和OracleJDK 8u221之前的免费存在巨大的区别:OracleJDK 8u221之前版本是可以无限期免费使用的,而OracleJDK17只有3年的免费期,期限一过,再使用就必须商业收费(前提是Oracle保持承诺,所有LTS都免费3年)。
文章参考:
1、Oracle JDK17及以后的版本真的都免费么?
2、JVM-Ecosystem-Report-2018
3、JVM-Ecosystem-eport-2020
二、OracleJDK 17
OracleJDK 17版本的推出,为开发者提供了不少新特性和功能增强。对于OracleJDK 17之前的版本,对于大多数项目而言,往往需要更改代码才能利用到这些新变化,以及需要对JVM进行调优才能获得性能的提升。但OracleJDK 17版本的推出,让开发者能轻易的、免费的对应用进行性能提升与构建。
引用:OptaPlanner(规划调度引擎)项目负责人对 OracleJDK 17、OracleJDK 16 和 OracleJDK 11 的性能基准测试与对比,看看 OracleJDK 17 的性能提升是否值得我们去升级。
测试结果:基于Java 11 (LTS) 、Java 16 versus and Java 17 (LTS)
- 在不同版本 JDK 上使用 G1GC 的每秒分数计算次数
- 使用 ParallelGC 在不同版本 JDK 上每秒计算分数
注释:查看 3 次单独运行的原始数据(此处未显示),机器重新分配数(B1 和 B10)在同一 JDK 和 GC 上的运行之间波动很大。 通常超过10%。其他数字不会受到这种不可靠性的影响。可以说忽略机器重新分配数字会更好。但是为了避免挑选数据的问题,这些结果和平均值确实包括它们。 - 具有不同 GC 的 JDK 17 每秒的评分计算次数
平均而言,对于 OptaPlanner 用例,这些基准测试表明: - 对于 G1GC(默认),JDK 17 比 JDK 11 快 8.66%,比 JDK 16 快 2.41%
- 对于 ParallelGC,JDK 17 比 JDK 11 快 6.54%,比 JDK 16 快 0.37%
- ParallelGC 比 G1GC 快 16.39%
对于 OptaPlanner 用例(这些用例最快的垃圾收集器仍然是 ParallelGC,而不是 G1GC-默认)而言,JDK17 版本中获得的性能非常值得升级。
参考文章:
1、How much faster is Java 17?
三、OpenJDK
OpenJDK与OracleJDK的区别
- 功能相同可以互相切换
- 从Java 11开始,Oracle JDK构建和OpenJDK构建在本质上是相同的
- 在外观和包装上有一些不同
主流OpenJDK发行商
- Red Hat OpenJDK(LTS支持)
- Zulu OpenJDK (LTS支持)
- Liberica JDK (LTS支持)
- AdoptOpenJDK(LTS支持)(推荐)
由于AdoptOpenJDK (LTS支持)是基于社区Oracle JDK孵化出来的,管理和维护都是同一批人(Rod MicKenna),所以选择AdoptOpenJDK替代Oracle JDK是不错的选择。
四、Thinking
最近公司在对JDK版本是否进行更换进行评审,因此,在此写下自己的一些见解。从技术人员的层面上来说,OracleJDK17 的推出,确实帮助开发者解决了很多性能提升上的问题,提升了应用的响应速度,让开发人员更加专注于业务的开发。但简单来说,在版本稳定性上,当过了OracleJDK 17的免费期限之后,OracleJDK 17的商业收费标准是什么?会变吗?应用是否会因为JDK版本的升级而更换?另外它是否会像HW那样,因为某些因素而被禁用,这些都是风险所在。在技术沉淀上来说,开发人员确实从复杂且难懂的底层技术中解脱出来了,更加专注于业务的开发,但这样也使得整个应用更加依赖于第三方,自身并没有技术积累,从而丧失产品的核心技术竞争力。相信更多层面的考虑,各位看官比我看得更加透彻,这里我就抛砖引玉了,欢迎各位多多留言,一起探讨。