測試環境和流程
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-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)
3、JVM 選項
啟用
-Xmx3840M
并明确指定垃圾回收器:
-
for G1GC,低延遲垃圾回收器(三個 JDK 版本的預設項)-XX:+UseG1GC
-
for ParallelGC,高吞吐量垃圾回收器-XX:+UseParallelGC
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 次運作的平均值。
總結
基于 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 一萬年不動搖嗎?