Java17快了多少(JDK 17、16和11的性能比较和分析)

Java17快了多少(JDK 17、16和11的性能比较和分析)
文章图片

Java 17 已正式发布,新版本提供了不少新特性和功能增强。不过对于大多数项目而言,往往需要更改代码才能利用到这些新变化,但性能除外 —— 开发者只需要升级 JDK 版本,就能免费获得性能提升。
规划调度引擎 OptaPlanner 项目负责人对 JDK 17、JDK 16 和 JDK 11 的性能基准测试进行了对比,看看 Java 17 的性能提升是否值得我们去升级。
测试环境和流程
1、硬件:稳定的机器,没有任何其他计算要求的进程在运行。
配置 Intel? Xeon? Silver 4116 @ 2.1 GHz (12 cores total / 24 threads) ,128 GiB RAM ,RHEL 8 x86_64
2、JDKs(用于编译和运行)

  • JDK 11
openjdk 11.0.12 2021-07-20OpenJDK 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-20OpenJDK 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-14OpenJDK Runtime Environment (build 17+35-2724)OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)

3、JVM 选项:启用-Xmx3840M并明确指定垃圾回收器:
  • -XX:+UseG1GC for G1GC,低延迟垃圾回收器(三个 JDK 版本的默认项)
  • -XX:+UseParallelGC for ParallelGC,高吞吐量垃圾回收器
4、Main class:org.optaplanner.examples.app.GeneralOptaPlannerBenchmarkApp,来自 OptaPlanner 8.10.0.Final中的 optaplanner-examples模块
  • 每次运行都使用 OptaPlanner 解决 11 个规划问题,例如员工排班、学校时间表和云优化。每个规划问题运行 5 分钟。日志记录设置为 INFO。基准测试以 30 秒的 JVM 预热开始。
  • 解决规划问题不涉及 IO(除了在启动期间加载输入的几毫秒)。单个 CPU 完全饱和。它会不断地创建许多短期存在的对象,然后 GC 将它们收集起来。
  • 基准测试会衡量每秒计算的分数数量,分数越高代表性能越好。为提议的规划解决方案计算分数并非易事:它涉及许多计算,包括检查每个实体与每个其他实体之间的冲突。
5、运行次数:每个 JDK 和每个垃圾回收器组合按顺序运行 3 次。下面的结果是这 3 次运行的平均值。
测试结果
Java 11 (LTS) and Java 16 versus Java 17 (LTS) Java17快了多少(JDK 17、16和11的性能比较和分析)
文章图片

Java17快了多少(JDK 17、16和11的性能比较和分析)
文章图片

【Java17快了多少(JDK 17、16和11的性能比较和分析)】Java17快了多少(JDK 17、16和11的性能比较和分析)
文章图片

Java17快了多少(JDK 17、16和11的性能比较和分析)
文章图片

G1GC versus ParallelGC on Java 17 Java17快了多少(JDK 17、16和11的性能比较和分析)
文章图片

Java17快了多少(JDK 17、16和11的性能比较和分析)
文章图片

总结
基于 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 一万年不动摇吗?

    推荐阅读