Java17附带了许多新特性和增强功能。然而,其中大多数都需要代码更改才能从中受益。除了性能。只需切换JDK安装,您就可以获得免费的性能提升。但是提升多少?值得吗?让我们通过比较JDK17、JDK16和JDK11的基准来找出答案。
基准方法
硬件:一台稳定的机器,无需运行任何其他要求计算的进程,具有Intel®Xeon®Silver 4116@2.1 GHz(总共12核/24线程)和128 GiB RAM内存,运行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 for G1GC
,低延迟垃圾收集器(所有三个jdk中的默认值)。-XX:+UseParallelGC
用于高吞吐量垃圾收集器ParallelGC。
主类:org.optaplanner.examples.app.GeneralOptaPlannerBenchmarkApp
,来自optaplanner 8.10.0.Final中的optaplanner examples模块。
- 每次运行都使用
OptaPlanner
解决11个规划问题,如员工排班、学校时间表和云优化。每个计划问题持续5分钟。日志记录设置为INFO。基准测试以30秒的JVM预热开始,该预热被丢弃。 - 解决计划问题不涉及IO(启动期间加载输入的几毫秒除外)。单个CPU完全饱和。它不断地创建许多短期对象,然后GC收集它们。
- 基准测量每秒计算的分数数。越高越好。计算建议的规划解决方案的分数非常重要:它涉及许多计算,包括检查每个实体和每个其他实体之间的冲突。
运行:每个JDK和每个垃圾收集器组合按顺序运行3次。下面的结果是这3次运行的平均值。
下面是复制这些结果的shell脚本。
结果
Java 11(LTS)和Java 16与Java 17(LTS)的对比
Java17上G1GC与ParallelGC的比较
执行摘要
平均而言,对于OptaPlanner
用例,这些基准表明:
- 对于G1GC,Java17比Java11快8.66%,比Java16快2.41%(默认)。
- 对于ParallelGC,Java17比Java11快6.54%,比Java16快0.37%。
- 并行垃圾收集器比G1垃圾收集器快16.39%。
这里没有什么大的意外:最新的JDK更快,高吞吐量垃圾收集器比低延迟垃圾收集器更快。
当我们对JDK15进行基准测试时,我们发现Java15比Java11快11.24%。现在,Java17比Java11的收益更少。这是否意味着Java17比Java15慢?
不,Java17也比Java15快。以前的基准测试是在不同的代码库上运行的(OptaPlanner 7.44而不是8.10)。不要把苹果和桔子作比较。
结论
总之,JDK17版本中获得的性能非常值得升级——至少对于OptaPlanner
用例来说是如此。
此外,这些用例中最快的垃圾收集器仍然是ParallelGC,而不是G1GC(默认值)。
原文地址:https://www.optaplanner.org/blog/2021/09/15/HowMuchFasterIsJava17.html
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2495.html
暂无评论