Java 17 快了多少?JDK 17、16 和 11 的性能比较和分析

来源: OSCHINA
编辑: 局长
2021-09-16

Java 17 于昨日正式发布,新版本提供了不少新特性和功能增强。不过对于大多数项目而言,往往需要更改代码才能利用到这些新变化,但性能除外 —— 开发者只需要升级 JDK 版本,就能免费获得性能提升。

规划调度引擎 OptaPlanner 项目负责人对 JDK 17、JDK 16 和 JDK 11 的性能基准测试进行了对比,看看 Java 17 的性能提升是否值得我们去升级。

测试环境和流程

  • 硬件:稳定的机器,没有任何其他计算要求的进程在运行。
    配置 Intel® Xeon® Silver 4116 @ 2.1 GHz (12 cores total / 24 threads) ,128 GiB RAM ,RHEL 8 x86_64

  • JDKs(用于编译和运行)

    • 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 (下载日期为 2021-09-06)

      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 for G1GC,低延迟垃圾回收器(三个 JDK 版本的默认项)

    • -XX:+UseParallelGC for ParallelGC,高吞吐量垃圾回收器

  • Main class:org.optaplanner.examples.app.GeneralOptaPlannerBenchmarkApp,来自 OptaPlanner 8.10.0.Final中的 optaplanner-examples模块

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

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

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

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

测试结果

Java 11 (LTS) and Java 16 versus Java 17 (LTS)

G1GC versus ParallelGC on Java 17

总结

基于 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 更快,高吞吐量垃圾回收器比低延迟垃圾回收器更快。

因此,Java 17 带来的性能提升非常值得升级,更重要的是它可以免费商用,而且还是 LTS 版本。所以你还要坚持 Java 8 一万年不动摇吗?

原文:https://www.optaplanner.org/blog/2021/09/15/HowMuchFasterIsJava17.html

展开阅读全文
27 收藏
分享
加载中
精彩评论
说不稳定的,给懒惰找借口吧。
就不能用高版本的先在一些边缘非核心的服务上跑起来吗。
我们生产用Java15,跑了快一年了,稳定得一批。核心应用跑的是Java11,在升到Java15了。
明天初先拿几个服务试点Java17,跑几个月后,全线切Java17。
Java9的List.of、Map.of、增强版try-with-resource、Flow api;
Java11的HttpClient,可以丢掉第三方HttpClient了;
Java13的原生字符串,可以多行文本块,跟转义符说byebye,另外还有空指针异常可以精确到具体对象了(原来是到行,但不知道该行的哪个对象为null);
Java 14的switch表达式,同时还可以做赋值表达式,优雅简洁;
Java15的值对象record类简洁易读,Java16的sealed class。
新特性带来的开发效率的提升,代码简洁度的提升,让编码时身心愉悦。
2021-09-16 09:55
100
举报
编程届等等党笑话有三:1. 等 LTS;2. LTS 来了等框架上 LTS;3. 框架上了 LTS 等稳定。所以什么叫稳定?
2021-09-16 10:24
26
举报
go语言 说真的 还不如java,语法太low,抽象能力不足,异常处理跟翔一样。
2021-09-16 17:15
16
举报
想要和 java8 的对比
2021-09-16 10:43
14
举报
心累,我用Go
2021-09-16 11:08
9
举报
最新评论 (77)
就只想知道17和java8相比性能差异如何。
2021-11-02 09:19
1
回复
举报
然而我是java8
2021-09-19 17:37
0
回复
举报
1.8钉子户路过
2021-09-18 15:38
0
回复
举报
实测jdk15以上 启动 hadoop+spark+kyuubi +zookeeper会报错,换jdk11就 ok,等待这些基础设施升级
2021-09-18 09:39
0
回复
举报
升级zookeeper的jar包到3.5或以上版本,3.4有问题。
2021-09-18 14:53
0
回复
举报
应该再等半年,java 18再 LTS
2021-09-17 17:26
0
回复
举报
大家都用的啥版本啊。openJDK么?
2021-09-17 14:52
0
回复
举报
我用IBM Semeru,主要是喜欢OpenJ9 JVM,内存占用小,启动速度快,本地开发环境比较清爽,docker中运行也没问题,它总体占用内存比较小,在docker环境下运行也很舒服
2021-09-17 16:33
3
回复
举报
Java的三页,C#的三个。
2021-09-17 09:21
2
回复
举报
吹j8的食大便啦
2021-09-17 09:17
2
回复
举报
吹的再好,还是用java8
2021-09-17 08:37
1
回复
举报
已升级17
2021-09-17 01:35
0
回复
举报
更多评论
77 评论
27 收藏
分享
返回顶部
顶部