Java17,有史以来最快 JDK!

肉眼品世界

共 3905字,需浏览 8分钟

 ·

2021-09-26 07:25


Java 17 已正式发布,该版本是自Java 11以来的首个长期支持版本。Oracle 还提议将 JDK LTS发布的节奏从每三年一次改为每两年一次,并且每个LTS 版本的服务时间至少8年以上。Java 版本通常是6个月一更新,时间分别在3月和9月,而这些版本的支持时间基本在半年左右。


Java各个版本的生命周期


据Oralce官博透露,虽然6个月版本的使用人数在增长,但大部分组织及企业更倾向于把LTS版本用在生产环境中,从而得到更加稳定可靠的服务。这一点从Snyk发布的2021 Java社区报告中也可以得到证实,虽然有61.5%的人在生产中使用Java 11,但仍有一半的Java 11用户(目前使用最多的版本)在他们的生产堆栈中使用Java 8。


 

1

Oracle 推出 Free Java License


截图自Oracle官博


自Java被Oralce收购以后,付费JDK就一直被人诟病,现在好了,Oracle 宣布推出JDK免费服务。什么意思呢?让我们来看一下官方解释:


  • Oracle正在为行业提供免费的,领先的Oralce JDK,包括所有季度安全更新,并包含商业和生产用途。

  • 新许可是“Oracle 免费条款和条件”(NFTC) 许可。此Oracle JDK许可证允许所有用户免费使用,甚至可以用于商业和生产用途。只要不收费,再分发是允许的。

  • 开发人员和组织现在无需点击即可轻松下载、使用、共享和重新分发 Oracle JDK。

  • Oracle 将从Oracle JDK 17开始提供这些免费版本和更新,并在下一个 LTS 版本之后继续提供整整一年。以前的版本不受此更改的影响。

  • Oracle 将继续按照自 Java 9 以来的相同版本和时间表提供GPL下的Oracle OpenJDK 版本。


总结成一句话,“免费”也并不意味着开发者可以随心所欲,因为Oracle的 NFTC 是禁止付费重新分发其 Java 软件


而在Java 17正式发布之前,Java开发框架Spring率先在官博宣布,Spring Framework 6和Spring Boot 3计划在2022年第四季度实现总体可用性的高端基线:


  • Java 17+(来自 Spring Framework 5.3.x 线中的 Java 8-17)

  • Jakarta EE 9+(来自Spring框架5.3.x 线中的 Java EE 7-8)


通过实际行动来支持 Java 17,间接呼吁开发者,是时候使用 Java 17了。


 

2

要不要升级呢?Java 17 到底有多快?


看到如此诚意满满的更新,开发者到底要不要升级呢?尽管只需切换JDK即可体验Java 17。对此,OptaPlanner网站做了一项基准测试:Java到底有多快?通过比较 JDK 17、JDK 16 和 JDK 11 来告诉你答案。


基准方法


硬件:一个稳定的机器不运行任何其他的计算要求苛刻的流程,配置:Intel® Xeon® Silver 4116 @ 2.1 GHz (12 cores total / 24 threads)和128 GiBRAM内存,运行RHEL 8 x86_64。


JDK版本


  • JDK 11


openjdk 11.0.12 2021-07-20
OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7)
OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode)


  • JDK 16


openjdk 16.0.2 2021-07-20
OpenJDK Runtime Environment (build 16.0.2+7-67)
OpenJDK 64-Bit Server VM (build 16.0.2+7-67, mixed mode, sharing)


  • JDK 17


openjdk 17 2021-09-14
OpenJDK Runtime Environment (build 17+35-2724)
OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)


JVM 选项:-Xmx3840M并明确指定垃圾收集器:


  • -XX:+UseG1GC 对于 G1GC,低延迟垃圾收集器(所有三个 JDK 中的默认值);

  • -XX:+UseParallelGC 对于 ParallelGC,高吞吐量垃圾收集器。


Main classorg.optaplanner.examples.app.GeneralOptaPlannerBenchmarkApp 来自 optaplanner-examplesOptaPlanner 中的模块8.10.0.Final。


  • 每次运行都使用 OptaPlanner 解决 11 个规划问题,例如 员工排班、 学校时间表和云优化。每个规划问题运行 5 分钟。日志记录设置为INFO。基准测试以 30 秒的 JVM 预热(warm up)开始,随后丢弃。

  • 解决规划问题不涉及IO(除了在启动期间加载输入的几毫秒)。单个CPU完全饱和。它不断地创建许多短期存在的对象,然后 GC 将它们收集起来。

  • 基准衡量每秒计算的分数数量,越高越好。为测试计划规划的解决方案计算分数并非易事:它涉及许多计算,包括检查每个实体与每个其他实体之间的冲突。


运行次数:每个JDK 和每个垃圾收集器组合按顺序运行 3 次。下面的结果是这 3 次运行的平均值。


测试结果


Java 11 (LTS) 和 Java 16 与 Java 17 (LTS)


表 1. 在不同 JDK 上使用 G1GC 的每秒计算得分


表 2. 在不同 JDK 上使用 ParallelGC 的每秒计算得分




备注:


查看 3 次单独运行的原始数据(此处未显示),机器重新分配数(B1 和 B10)在同一 JDK 和 GC 上的运行之间波动很大,通常超过10%,其他数字不会受到这种不可靠性的影响。


可以以说忽略 Machine Reassignment numbers 更好。但是为了避免挑选数据的问题,这些结果和平均值确实把它们包括进来了。


Java 17 上的 G1GC 与 ParallelGC


表 3.JDK 17 下不同 GC 每秒的计算得分



基准测试总结


  • 平均而言,以 OptaPlanner 为例的基准测试结果表明:

  • 对于 G1GC(默认),Java 17 比 Java 11 快 8.66%,比 Java 16 快 2.41%。

  • 对于 ParallelGC,Java 17 比 Java 11 快 6.54%,比 Java 16 快 0.37%。

  • Parallel GC 比 G1 GC 快 16.39%。


多说一句


在基于 JDK 15 的基准测试中,Java 15 比 Java 11 快 11.24%。现在,Java 17 相对于 Java 11 的增益更少。这是否意味着 Java 17 比 Java 15 慢?


答案是否定的,Java 17 依然比 Java 15 快,因为之前的那些基准测试是在不同的代码库上运行的(OptaPlanner 7.44 而不是 8.10)。不要拿橙子与苹果作比较,不具有可比性。


结论


总而言之,JDK17 的性能表现还是非常值得升级的,至少于OptaPlanner Demo 而言。


此外,这些用例最快的垃圾收集器仍然是ParallelGC, 而不是G1GC(默认)。


作为3年后首次发布的LTS版本的Java 17给你带来了哪些惊喜?面对Go、Kotlion等JVM的强势发展,你觉得Java还能保持霸主地位吗?


参考链接:

https://mail.openjdk.java.net/pipermail/jdk-dev/2021-September/006037.html

https://mail.openjdk.java.net/pipermail/jdk-dev/2021-September/006037.html

https://www.optaplanner.org/blog/2021/09/15/HowMuchFasterIsJava17.htm


推荐阅读:

世界的真实格局分析,地球人类社会底层运行原理

不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT)

企业IT技术架构规划方案

论数字化转型——转什么,如何转?

华为干部与人才发展手册(附PPT)

企业10大管理流程图,数字化转型从业者必备!

【中台实践】华为大数据中台架构分享.pdf

华为的数字化转型方法论

华为如何实施数字化转型(附PPT)

超详细280页Docker实战文档!开放下载

华为大数据解决方案(PPT)


浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报