Java 17正式发布后,带来了许多新的特性和功能增强。对于大部分开发项目来说,想要利用这些新功能,通常需要对现有代码进行一些修改。性能的提升是不同的,开发者只需简单升级JDK版本,就可以轻松享受性能上的提升,而无需做额外的调整。
为了验证Java 17的性能优势,OptaPlanner项目的负责人对JDK 17、JDK 16和JDK 11进行了性能基准测试。通过这项对比测试,我们可以更清晰地了解Java 17是否值得在生产环境中进行升级。
测试环境配置
测试使用的硬件设备配置如下:
处理器:Intel Xeon Silver 4116,2.1GHz,12核/24线程
内存:128GB
操作系统:RHEL8 x86_64
JDK版本如下:
JDK 11
JDK 16
JDK 17(下载日期为2021年9月6日)
JVM选项设置
为了确保测试的一致性,JVM的配置采用了以下选项:
启用 -Xmx3840M 内存设置。
设置了两种垃圾回收器供测试使用:
-XX:+UseG1GC,即G1垃圾回收器,主要关注低延迟。
-XX:+UseParallelGC,即并行垃圾回收器,主要提高吞吐量。
基准测试流程
使用OptaPlanner的样例程序 org.optaplanner.examples.app.GeneralOptaPlannerBenchmarkApp(版本8.10.0.Final中的 optaplanner-examples 模块)进行测试。每次运行时,系统会用OptaPlanner解决11个规划问题,涵盖员工排班、学校时间表和云计算优化等问题。每个问题的解决时间为5分钟,日志级别设置为INFO,测试会在30秒的JVM预热后开始。
这些规划问题不涉及IO操作,除了在启动时加载数据时产生的少量IO。每个问题会充分利用单个CPU核的计算能力,产生大量短期存在的对象,这些对象将被垃圾回收器回收。测试的核心指标是每秒计算的分数数量,分数越高,表示性能越好。解决规划问题时,需要进行大量计算,尤其是检测各个实体之间的冲突,因此分数数量是衡量性能的关键指标。
测试结果
每种JDK和垃圾回收器组合都会运行3次,并取平均值。以下是测试结果的
使用G1GC(默认设置)时,Java 17相比Java 11提升了8.66%的性能,且比Java 16提升了2.41%。
使用ParallelGC时,Java 17相比Java 11提升了6.54%,与Java 16相比,提升幅度较小,仅为0.37%。
在所有测试中,ParallelGC的性能比G1GC快16.39%。
从测试结果来看,Java 17在性能上相较于旧版JDK表现出了明显的提升。尤其是使用高吞吐量的ParallelGC垃圾回收器时,性能提升尤为显著,而G1GC虽然在某些场景下略有逊色,但整体表现也较为出色。升级到Java 17不仅能带来更快的执行速度,而且由于Java 17是LTS(长期支持)版本,这意味着它将在长期内得到官方支持,并且该版本对商业用途免费。
既然性能提升如此明显,而且可以通过简单的JDK升级获得,开发者们是否还会继续固守Java 8不放手呢?