Oracle公司JDK 17正式釋出,JDK 17屬於長期支援(LTS)版本,也就是獲得8年的技術支援,自2021年9月至2029年9月截止。
JDK 17版本更新了很多比較實用的新特性,關於此版本的新特性,詳細介紹和實際開發中的應用將在後續篇幅,這裡就不在深入贅述了,對JDK 17新特性感興趣的朋友可以留意後續文章的更新。
特性介紹
JDK 17更新了包括14個特性,具體如下表所示:
Restore Always-Strict Floating-Point Semantics
恢復始終嚴格模式(Always-Strict)的浮點語義
EnhancedPseudo-Random Number Generators
增強型偽隨機數生成器
New macOS RenderingPipeline
新增macOS渲染管道
macOS/AArch64 Port
支援將JDK移植到macOS或AArch64
Deprecate the AppletAPI for Removal
棄用待移除的Applet API
注:JDK 9中的JEP 289先前已棄用Applet API,但並未將其刪除。
Strongly EncapsulateJDK Internals
強封裝JDK內部API
Pattern Matching forswitch (Preview)
switch模式匹配進入預覽(Preview)階段
Remove RMI Activation
移除RMI(遠端方法呼叫)啟用機制
Sealed Classes
密封類
注:密封類是由JEP 360提出的,並在JDK 15中作為預覽功能提供。它們由JEP 397再次提出並進行了改進,並作為預覽功能在JDK 16中提供。該JEP建議在JDK17中完成密封類,與JDK 16沒有任何變化。
Remove theExperimental AOT and JIT Compiler
移除實驗性AOT和JIT編譯器
Deprecate theSecurity Manager for Removal
棄用待移除的安全管理器(Security Manager)
注:棄用安全管理器,在後續版本中移除。安全管理器可追溯到Java 1.0。多年來,它一直不是保護客戶端Java程式碼的主要手段,也很少用於保護伺服器端程式碼。為了推動Java向前發展,Oracle打算棄用安全管理器,以便與舊Applet API(JEP 398)一起刪除。
Foreign Function& Memory API (Incubator)
外部函式和記憶體API(孵化器)孵化階段
注:Java程式可以通過該API與Java執行時之外的程式碼和資料進行互操作。通過有效呼叫外部函式(即JVM之外的程式碼),以及安全地訪問外部記憶體(即不由JVM管理的記憶體),API使Java程式能夠呼叫本地庫和處理本地資料,而沒有JNI。
Vector API (SecondIncubator)
Vector API(第二孵化器)第二孵化階段
注:引入一個API來表達向量計算,這些計算在執行時可靠地編譯為支援的CPU架構上的最佳向量指令,從而實現優於等效標量計算的效能。
Context-SpecificDeserialization Filters
上下文特定的反序列化過濾器
注:允許應用程式通過JVM範圍的過濾器工廠配置特定於上下文和動態選擇的反序列化過濾器,該工廠被呼叫以為每個單獨的反序列化操作選擇一個過濾器。
Free Java License
根據Oracle官方釋出的最新Free Java License,Oracle JDK 可以免費用於生產環境。Free Java License 大致摘要:
1)Oracle JDK免費提供包括所有季度安全更新,含商業和生產用途。
2)新許可證屬於“Oracle 免費條款和條件”(NFTC)許可證。此Oracle JDK許可證允許所有使用者免費使用,甚至可以用於商業和生產用途。不收取費用的前提下,允許再分發。
3)開發人員和組織目前可輕鬆下載、使用、共享和重新分發Oracle JDK。
4)Oracle將從JDK 17開始提供這些免費版本和更新,並在下一個LTS版本釋出之後繼續提供整整一年。需要注意的是以前的版本不受此更改的影響。
5)Oracle將繼續按照自Java 9以來的相同版本和時間表提供GPL下的Oracle OpenJDK版本。
JDK17下載地址:https://jdk.java.net/17/
JDK17技術文件:https://docs.oracle.com/en/java/javase/17/index.html
Spring支援
Spring官方曾宣佈Spring Framework 6.0和Spring Boot 3.0將基於JDK 17版本,預計2022年,下半年釋出Spring Framework 6.0正式候選(RC)版本。
作為開發人員的你或者說你們公司,目前用的是JDK7還是JDK8呢?歡迎各位下方留言。