Java 17新特性,快到起飛?驚呆了!
文末推薦一本好書
都說Java 8 是YYDS,那你注意到 Java 17 也是長期支持版本嗎?目前按計劃 JDK 19 將于今年 9 月發(fā)布
SpringBoot 正式支持Java 17,Kafka3.0棄用Java8
Spring Boot 2.5.5是Spring Boot 第一個支持Java 17的版本。現(xiàn)在你已經(jīng)可以從Spring Initializr初始化Spring Boot 支持 java17 版本了。

Java 17的14 個 新特性,分別是:
-
306:恢復(fù)始終嚴格的浮點語義 -
356:增強型偽隨機數(shù)發(fā)生器 -
382:新的 macOS 渲染管道 -
391:macOS/AArch64 端口 -
398:棄用即將刪除的 Applet API -
403:強封裝JDK的內(nèi)部API -
406:Switch模式匹配(預(yù)覽) -
407:刪除 RMI 激活 -
409:密封類 -
410:刪除實驗性 AOT 和 JIT 編譯器 -
411:棄用即將刪除安全管理器 -
412:外部函數(shù)和內(nèi)存 API(孵化器) -
414:Vector API(第二次進行特性孵化) -
415:特定于上下文的反序列化過濾器
在這14個功能中,哪一個對你最實用。
3年后的首個 LTS版本
據(jù)Oracle Java SE支持路線圖顯示,Java 17 是自Java 11以來的首個長期支持版本。Oracle 還提議將 JDK LTS 發(fā)布的節(jié)奏從每三年一次改為每兩年一次,并且每個LTS 版本的服務(wù)時間至少8年以上。Java 版本通常是6個月一更新,時間分別在3月和9月,而這些版本的支持時間基本在半年左右。

Java各個版本的生命周期
據(jù)Oralce官博透露,雖然6個月版本的使用人數(shù)在增長,但大部分組織及企業(yè)更傾向于把LTS版本用在生產(chǎn)環(huán)境中,從而得到更加穩(wěn)定可靠的服務(wù)。這一點從Snyk發(fā)布的2021 Java 社區(qū)報告中也可以得到證實,雖然有 61.5% 的人在生產(chǎn)中使用 Java 11,但仍有一半的 Java 11 用戶(目前使用最多的版本)在他們的生產(chǎn)堆棧中使用 Java 8。
除了上面提到是14個重大更新和更快的LTS服務(wù)節(jié)奏外,Java 17還有哪些亮點呢?
Oracle 推出 Free Java License
自Java 被 Oralce 收購以后,付費 JDK 就一直被人詬病,現(xiàn)在好了,Oracle 宣布推出JDK免費服務(wù)。什么意思呢?讓我們來看一下官方解釋:
-
Oracle正在為行業(yè)提供免費的,領(lǐng)先的 Oralce JDK,包括所有季度安全更新,并包含商業(yè)和生產(chǎn)用途。 -
新許可是“Oracle 免費條款和條件”(NFTC) 許可。此 Oracle JDK 許可證允許所有用戶免費使用,甚至可以用于商業(yè)和生產(chǎn)用途。只要不收費,再分發(fā)是允許的。 -
開發(fā)人員和組織現(xiàn)在無需點擊即可輕松下載、使用、共享和重新分發(fā) Oracle JDK。 -
Oracle 將從Oracle JDK 17 開始提供這些免費版本和更新,并在下一個 LTS 版本之后繼續(xù)提供整整一年。以前的版本不受此更改的影響。 -
Oracle 將繼續(xù)按照自 Java 9 以來的相同版本和時間表提供GPL下的Oracle OpenJDK 版本。
總結(jié)成一句話,“免費”也并不意味著開發(fā)者可以隨心所欲,因為 Oracle 的 NFTC 是禁止付費重新分發(fā)其 Java 軟件。
而在Java 17 正式發(fā)布之前,Java 開發(fā)框架 Spring 率先在官博宣布,Spring Framework 6 和Spring Boot 3 計劃在 2022 年第四季度實現(xiàn)總體可用性的高端基線:
-
Java 17+(來自 Spring Framework 5.3.x 線中的 Java 8-17) -
Jakarta EE 9+(來自Spring框架5.3.x 線中的 Java EE 7-8)
通過實際行動來支持 Java 17,間接呼吁開發(fā)者,是時候使用 Java 17了。
要不要升級呢?Java 17 到底有多快?
看到如此誠意滿滿的更新,開發(fā)者到底要不要升級呢?盡管只需切換JDK即可體驗Java 17。對此,OptaPlanner網(wǎng)站做了一項基準測試:Java到底有多快?通過比較 JDK 17、JDK 16 和 JDK 11 來告訴你答案。
基準方法
-
硬件:一個穩(wěn)定的機器不運行任何其他的計算要求苛刻的流程,配置:Intel? Xeon? Silver 4116 @ 2.1 GHz (12 cores total / 24 threads)和128 GiBRAM內(nèi)存,運行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 個規(guī)劃問題,例如 員工排班、 學(xué)校時間表和云優(yōu)化。每個規(guī)劃問題運行 5 分鐘。日志記錄設(shè)置為
INFO。基準測試以 30 秒的JVM預(yù)熱(warm up)開始,隨后丟棄。 -
解決規(guī)劃問題不涉及
IO(除了在啟動期間加載輸入的幾毫秒)。單個CPU完全飽和。它不斷地創(chuàng)建許多短期存在的對象,然后GC將它們收集起來。 -
基準衡量每秒計算的分數(shù)數(shù)量,越高越好。為測試計劃規(guī)劃的解決方案計算分數(shù)并非易事:它涉及許多計算,包括檢查每個實體與每個其他實體之間的沖突。
-
運行次數(shù):每個
JDK和每個垃圾收集器組合按順序運行 3 次。下面的結(jié)果是這 3 次運行的平均值。
測試結(jié)果
Java 11 (LTS) 和 Java 16 與 Java 17 (LTS)
表1. 在不同 JDK 上使用 G1GC 的每秒計算得分


表2. 在不同 JDK 上使用 ParallelGC 的每秒計算得分

備注:
查看 3 次單獨運行的原始數(shù)據(jù)(此處未顯示),機器重新分配數(shù)(B1 和 B10)在同一 JDK 和 GC 上的運行之間波動很大,通常超過10%,其他數(shù)字不會受到這種不可靠性的影響。
可以以說忽略 Machine Reassignment numbers 更好。但是為了避免挑選數(shù)據(jù)的問題,這些結(jié)果和平均值確實把它們包括進來了。
Java 17 上的 G1GC 與 ParallelGC
表3.JDK 17 下不同 GC 每秒的計算得分
基準測試總結(jié)
平均而言,以 OptaPlanner 為例的基準測試結(jié)果表明:
-
對于 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%。
結(jié)果并無太大的驚喜表現(xiàn):最新的 JDK 更快,高吞吐量垃圾收集器比低延遲垃圾收集器更快。
多說一句
在基于JDK 15 的基準測試中,Java 15 比 Java 11 快 11.24%。現(xiàn)在,Java 17 相對于 Java 11 的增益更少。這是否意味著 Java 17 比 Java 15 慢?
答案是否定的,Java 17 依然比 Java 15 快,因為之前的那些基準測試是在不同的代碼庫上運行的(OptaPlanner 7.44 而不是 8.10)。不要拿橙子與蘋果作比較,不具有可比性。
結(jié)論
總而言之,JDK17 的性能表現(xiàn)還是非常值得升級的,至少于OptaPlanner Demo 而言。
此外,這些用例最快的垃圾收集器仍然是ParallelGC, 而不是G1GC(默認)。
作為3年后首次發(fā)布的LTS版本的Java 17給你帶來了哪些驚喜?面對Go、Kotlion等JVM的強勢發(fā)展,你覺得Java還能保持霸主地位嗎?
好書推薦
如何快速掌握全部 Java17 新特性
Java 誕生 27 年來,這本享譽全球的 Java 經(jīng)典著作《Core Java》一路伴隨著 Java 的成長,得到了百萬 Java 開發(fā)者的青睞,幾乎出現(xiàn)在每個“學(xué)Java要看什么書”類似的書單里,影響了幾代技術(shù)人。
27年間,每當 Java 有新的 LTR 版本發(fā)布,這本書都會隨之更新,這次也不例外。現(xiàn)在,針對 Java 17 新特性的《Java核心技術(shù)》第 12 版*中文版(卷1)終于上市了!
《Java核心技術(shù)》第 12 版涵蓋了 Java 17 的最新特性,相應(yīng)調(diào)整了部分內(nèi)容結(jié)構(gòu),同時延續(xù)之前版本的優(yōu)良傳統(tǒng),利用清晰明了的示例加以解釋,并提供了全部示例代碼,以便讀者學(xué)習(xí)和靈活應(yīng)用。它將續(xù)寫從前的輝煌,使開發(fā)者能及時跟上 Java 前進的步伐。
我們尋找了50位曾經(jīng)看著《Java核心技術(shù)》這本書成長起來的KOL推薦本書!大家的寄語全部收錄在第12版新書中!

這本書究竟是怎樣的一本書,得到眾多開發(fā)者的一致推薦呢?
●《Java核心技術(shù)》并非市面那些零基礎(chǔ)速成的書,很好地避免了開發(fā)基礎(chǔ)書容易犯的“大而泛”的問題,盡管內(nèi)容繁多,但對知識點的介紹并非泛泛而過。通過周密組織,從Java繁雜的內(nèi)容中整理出一條清晰的主線,構(gòu)成一個完整的知識體系。
●整本書不僅讓你深入了解設(shè)計和實現(xiàn)Java應(yīng)用涉及的所有基礎(chǔ)知識和Java特性,還會幫助你掌握開發(fā)Java程序所需的全部基本技能。
●作者凱.霍斯特曼是Java技術(shù)堅定的倡導(dǎo)者,至今仍常年在國際上的各類計算機峰會上進行技術(shù)分享。在位于硅谷中心的圣何塞州立大學(xué)教學(xué)30余年,為硅谷的頂尖科技公司培養(yǎng)了大量計算機專業(yè)人才。非常熟知大廠要什么!所以他的書也是非常有針對性。
●為幫助大家更輕松地學(xué)習(xí)Java,作者還親自錄制了配套視頻講解課程,視頻配有中文配音+中文字幕,與紙書涵蓋內(nèi)容基本一致,適配Java SE8以后的版本。紙書+視頻搭配學(xué)習(xí),學(xué)習(xí)Java更輕松。(B站搜索“Java核心技術(shù)站”直達)。
......
相信在學(xué)習(xí)Java的道路上有了《Java核心技術(shù)》這本書的輔助,你一定可以做到事半功倍。
臨近618,在各大平臺本書均有大力度的折扣,還不快閉眼入手!

