都說Java 8 是YYDS,那你注意到 Java 17 已經正式發布了嗎?目前Java 18 也已經進入早期開發階段,

Java 官方團隊已在OpenJDK郵件中確認,8月6號發布的 JDK 17 build 35 可正式作為GA版本使用,期間沒有報告任何P1錯誤,
Java 17的14 個 JEP,分別是:
- 306:恢復始終嚴格的浮點語意
- 356:增強型偽亂數發生器
- 382:新的 macOS 渲染管道
- 391:macOS/AArch64 埠
- 398:棄用即將洗掉的 Applet API
- 403:強封裝JDK的內部API
- 406:Switch模式匹配(預覽)
- 407:洗掉 RMI 激活
- 409:密封類
- 410:洗掉實驗性 AOT 和 JIT 編譯器
- 411:棄用即將洗掉安全管理器
- 412:外部函式和記憶體 API(范訓器)
- 414:Vector API(第二次進行特性范訓)
- 415:特定于背景關系的反序列化過濾器
在這14個功能中,哪一個對你最實用,
3年后的首個 LTS版本
據Oracle Java SE支持路線圖顯示,Java 17 是自Java 11以來的首個長期支持版本,Oracle 還提議將 JDK LTS 發布的節奏從每三年一次改為每兩年一次,并且每個LTS 版本的服務時間至少8年以上,Java 版本通常是6個月一更新,時間分別在3月和9月,而這些版本的支持時間基本在半年左右,

據Oralce官博透露,雖然6個月版本的使用人數在增長,但大部分組織及企業更傾向于把LTS版本用在生產環境中,從而得到更加穩定可靠的服務,這一點從Snyk發布的2021 Java 社區報告中也可以得到證實,雖然有 61.5% 的人在生產中使用 Java 11,但仍有一半的 Java 11 用戶(目前使用最多的版本)在他們的生產堆疊中使用 Java 8,
除了上面提到是14個重大更新和更快的LTS服務節奏外,Java 17還有哪些亮點呢?
Oracle 推出 Free Java License

自 Java 被 Oralce 收購以后,付費 JDK 就一直被人詬病,現在好了,Oracle 宣布推出JDK免費服務,什么意思呢?讓我們來看一下官方解釋:
-
Oracle正在為行業提供免費的,領先的 Oralce JDK,包括所有季度安全更新,并包含商業和生產用途,
-
新許可是“Oracle 免費條款和條件”(NFTC) 許可,此 Oracle JDK 許可證允許所有用戶免費使用,甚至可以用于商業和生產用途,只要不收費,再分發是允許的,
-
開發人員和組織現在無需點擊即可輕松下載、使用、共享和重新分發 Oracle JDK,
-
Oracle 將從Oracle JDK 17 開始提供這些免費版本和更新,并在下一個 LTS 版本之后繼續提供整整一年,以前的版本不受此更改的影響,
-
Oracle 將繼續按照自 Java 9 以來的相同版本和時間表提供GPL下的Oracle OpenJDK 版本,
總結成一句話,“免費”也并不意味著開發者可以隨心所欲,因為 Oracle 的 NFTC 是禁止付費重新分發其 Java 軟體,
而在 Java 17 正式發布之前,Java 開發框架 Spring 率先在官博宣布,Spring Framework 6 和Spring Boot 3 計劃在 2022 年第四季度實作總體可用性的高端基線:
- Java 17+(來自 Spring Framework 5.3.x 線中的 Java 8-17)
- Jakarta EE 9+(來自Spring框架5.3.x 線中的 Java EE 7-8)
通過實際行動來支持 Java 17,間接呼吁開發者,是時候使用 Java 17了,
要不要升級呢?Javv 17 到底有多快?
看到如此誠意滿滿的更新,開發者到底要不要升級呢?盡管只需切換JDK即可體驗Java 17,對此,OptaPlanner網站做了一項基準測驗:Java到底有多快?通過比較 JDK 17、JDK 16 和 JDK 11 來告訴你答案,
基準方法
-
硬體:一個穩定的機器不運行任何其他的計算要求苛刻的流程,配置: Intel? Xeon? Silver 4116 @ 2.1 GHz (12 cores total / 24 threads)和128 GiBRAM記憶體,運行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對于 G1GC,低延遲垃圾收集器(所有三個 JDK 中的默認值), -
-XX:+UseParallelGC對于 ParallelGC,高吞吐量垃圾收集器,
-
-
Main class:
org.optaplanner.examples.app.GeneralOptaPlannerBenchmarkApp來自optaplanner-examplesOptaPlanner中的模塊8.10.0.Final,-
每次運行都使用 OptaPlanner 解決 11 個規劃問題,例如 員工排班、 學校時間表和云優化,每個規劃問題運行 5 分鐘,日志記錄設定為
INFO,基準測驗以 30 秒的JVM預熱(warm up)開始,隨后丟棄, -
解決規劃問題不涉及
IO(除了在啟動期間加載輸入的幾毫秒),單個CPU完全飽和,它不斷地創建許多短期存在的物件,然后GC將它們收集起來, -
基準衡量每秒計算的分數數量,越高越好,為測驗計劃規劃的解決方案計算分數并非易事:它涉及許多計算,包括檢查每個物體與每個其他物體之間的沖突,
-
-
運行次數:每個
JDK和每個垃圾收集器組合按順序運行 3 次,下面的結果是這 3 次運行的平均值,
測驗結果
Java 11 (LTS) 和 Java 16 與 Java 17 (LTS)




備注:
查看 3 次單獨運行的原始資料(此處未顯示),機器重新分配數(B1 和 B10)在同一 JDK 和 GC 上的運行之間波動很大,通常超過10%,其他數字不會受到這種不可靠性的影響,
可以以說忽略 Machine Reassignment numbers 更好,但是為了避免挑選資料的問題,這些結果和平均值確實把它們包括進來了,
Java 17 上的 G1GC 與 ParallelGC


基準測驗總結
平均而言,以 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 更快,高吞吐量垃圾收集器比低延遲垃圾收集器更快,
多說一句
在基于 JDK 15 的基準測驗中,Java 15 比 Java 11 快 11.24%,現在,Java 17 相對于 Java 11 的增益更少,這是否意味著 Java 17 比 Java 15 慢?
答案是否定的,Java 17 依然比 Java 15 快,因為之前的那些基準測驗是在不同的代碼庫上運行的(OptaPlanner 7.44 而不是 8.10),不要拿橙子與蘋果作比較,不具有可比性,
結論
總而言之,JDK17 的性能表現還是非常值得升級的,至少于OptaPlanner Demo 而言,
此外,這些用例最快的垃圾收集器仍然是ParallelGC, 而不是G1GC(默認),
作為3年后首次發布的LTS版本的Java 17給你帶來了哪些驚喜?面對Go、Kotlion等JVM的強勢發展,你覺得Java還能保持霸主地位嗎?
參考鏈接:
- https://mail.openjdk.java.net/pipermail/jdk-dev/2021-September/006037.html
- https://mail.openjdk.java.net/pipermail/jdk-dev/2021-September/006037.html
- https://www.optaplanner.org/blog/2021/09/15/HowMuchFasterIsJava17.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/300793.html
標籤:其他
