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

2021-09-16 11:00:36

,新版本提供了不少新特性和功能增強。不過對於大多數專案而言,往往需要更改程式碼才能利用到這些新變化,但效能除外 —— 開發者只需要升級 JDK 版本,就能免費獲得效能提升。

規劃排程引擎  專案負責人對 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 一萬年不動搖嗎?

原文:

展開閱讀全文