JAVA 17版本介绍(二)新特性介绍
文章目錄
- 1.隨著always-strict 浮點語義的恢復
- 2.增強型偽隨機數生成器
- 3.新的 macOS 渲染管線
- 4.macOS/AArch64 端口
- 5.棄用 Applet API
- 6.JDK 內部的強封裝
- 7.switch模式匹配(預覽)
- 8.刪除遠程方法調用 (RMI) 激活機制
- 9.密封類
- 10.刪除 AOT 和 JIT
- 11.棄用安全管理器
- 12.外部函數和內存 API(孵化器)
- 13.Vector API(第二孵化器)
- 14.特定于上下文的反序列化過濾器
1.隨著always-strict 浮點語義的恢復
浮點運算將變得始終嚴格,而不是同時具有嚴格的浮點語義( strictfp) 和細微不同的默認浮點語義。這將原始浮點語義恢復到語言和 VM,匹配 Java 標準版 1.2 中引入嚴格和默認浮點模式之前的語義。這項工作的目標包括簡化數字敏感庫的開發,包括java.lang.Math和java.lang.StrictMath. 1990 年代后期更改默認浮點語義的動力源于原始 Java 語言和 JVM 語義之間的不良交互以及流行的 x86 架構的 x87 浮點協處理器指令集的一些特殊性。在所有情況下匹配精確的浮點語義,包括非正規操作數和結果,需要大量額外指令的開銷。在沒有上溢或下溢的情況下匹配結果可以用更少的開銷來完成,這大致是 Java SE 1.2 中引入的修改后的默認浮點語義所允許的。但是SSE2(Streaming SIMD Extensions 2)擴展,從 2001 年左右開始在 Pentium 4 和更高版本的處理器中提供,可以直接支持嚴格的 JVM 浮點運算,而不會產生過多的開銷。
2.增強型偽隨機數生成器
增強的偽隨機數生成器將為偽隨機數生成器 (PRNG) 提供新的接口類型和實現,包括可跳轉的 PRNG 和額外的一類可拆分 PRNG 算法 (LXM)。新接口RandomGenerator將為所有現有的和新的 PRNG 提供統一的 API。將提供四個專門的 RandomGenerator 接口。推動該計劃的重點是 Java 偽隨機數生成領域的多個改進領域。這項工作不需要提供許多其他 PRNG 算法的實現。但是已經添加了三種常用算法,這些算法已經廣泛部署在其他編程語言環境中。該計劃的目標包括:
3.新的 macOS 渲染管線
使用 Apple Metal API 作為使用已棄用 OpenGL API 的現有管道的替代方案。該提案旨在為使用 MacOS Metal 框架的 Java 2D API 提供功能齊全的渲染管道,并在 Apple 從未來版本的 MacOS 中刪除 OpenGL API 時做好準備。該管道旨在與現有的 OpenGL 管道具有同等功能,在選定的應用程序和基準測試中具有相同或更好的性能。將創建適合當前 Java 2D 模型的干凈架構。管道將與 OpenGL 管道共存直到過時。添加任何新的 Java 或 JDK API 并不是提案的目標。
4.macOS/AArch64 端口
將 JDK 移植到 MacOS/AArch64以響應Apple 將其 Macintosh 計算機從 x64 轉換到 AArch64 的計劃。適用于 Linux 的 Java 的 AArch64 端口已經存在,并且 Windows 的工作正在進行中。Java 構建者希望通過使用條件編譯來重用來自這些端口的現有 AArch64 代碼,這是 JDK 端口中的規范,以適應低級約定的差異,例如應用程序二進制接口和一組保留的處理器寄存器。MacOS/AArch64 的更改可能會破壞現有的 Linux/AArch64、Windows/AArch64 和 MacOS/x64 端口,但通過預集成測試將降低風險。
5.棄用 Applet API
這個 API 本質上是無關緊要的,因為所有 Web 瀏覽器供應商要么已經取消了對 Java 瀏覽器插件的支持,要么已經宣布了這樣做的計劃。Applet API 之前在 2017 年 9 月的Java 9中已被棄用,但并未刪除。
6.JDK 內部的強封裝
除了關鍵的內部 API,如sun.misc.Unsafe,將不再可能通過單個命令行選項放松內部元素的強封裝,這在 JDK 9 到 JDK 16 中是可行的。計劃包括提高 JDK 的安全性和可維護性,并鼓勵開發人員從內部元素遷移到標準 API。
7.switch模式匹配(預覽)
switch預覽版擴展了 Java 中的模式語言,允許switch針對多個模式測試表達式和語句,每個模式都有特定的操作。這使得復雜的面向數據的查詢能夠簡潔而安全地表達。此功能的目標包括switch通過使模式出現在案例標簽中來擴展表達式和語句的表現力和應用,放松歷史對switch需要時空的敵意,以及引入兩種模式:guarded patterns,允許模式匹配邏輯用任意布爾表達式和 精煉parenthesized patterns,解決了一些解析歧義。在JDK 16 中,instanceof運算符被擴展為采用類型模式并執行模式匹配。提議的適度擴展允許簡化熟悉的instanceof-and-cast 習語。
8.刪除遠程方法調用 (RMI) 激活機制
刪除遠程方法調用 (RMI) 激活機制,同時保留 RMI 的其余部分。RMI 激活機制已過時和廢棄,在JDK 15 中不推薦使用。
9.密封類
密封類和接口限制哪些其他類或接口可以擴展或實現它們。該提案的目標包括允許類或接口的作者控制哪些代碼負責實現它,提供比訪問修飾符更具聲明性的方式來限制超類的使用,并通過提供基礎支持模式匹配的未來方向用于模式的詳盡分析。
10.刪除 AOT 和 JIT
它們幾乎沒有使用,但需要大量維護工作。該計劃要求維護 Java 級別的 JVM 編譯器接口,以便開發人員可以繼續使用外部構建的編譯器版本進行 JIT 編譯。AOT 編譯(jaotc 工具)作為一項實驗性功能并入JDK 9。該工具使用Graal 編譯器,它本身是用 Java 編寫的,用于 AOT 編譯。這些實驗性功能未包含在JDK 16 中由 Oracle 發布的版本,沒有人抱怨。根據規定的計劃,將刪除三個 JDK 模塊: jdk.aot(jaotc 工具);internal.vm.compiler,Graal 編譯器;和 jdk.internal.vm.compiler.management,Graal MBean。與 AOT 編譯相關的 HotSpot 代碼也將被刪除。
————————————————
11.棄用安全管理器
準備在未來版本中移除。追溯到 Java 1.0,安全管理器一直是保護客戶端 Java 代碼的主要手段,很少用于保護服務器端代碼。該提案的一個目標是評估是否需要新的 API 或機制來解決使用安全管理器的特定狹窄用例,例如阻塞System::exit。計劃要求棄用安全管理器以與舊 Applet API 一起刪除,該 API 也計劃在 JDK 17 中棄用。
12.外部函數和內存 API(孵化器)
引入了一個孵化器階段,允許 Java 程序與 Java 運行時之外的代碼和數據進行互操作。通過高效調用外部函數,即 JVM 之外的代碼,并安全地訪問外部內存,即非 JVM 管理的內存,該 API 使 Java 程序能夠調用原生庫和處理原生數據,而沒有 JNI(Java本機接口)。提議的 API 是兩個 API 的演變——外部內存訪問 API 和外部鏈接器 API。外部內存訪問 API 在 2019 年作為孵化 API 面向 Java 14,并在 Java 15 和 Java 16 中重新孵化。外部鏈接器 API 在 2020 年末面向 Java 16 作為孵化 API。API 計劃的目標包括易用性、性能、通用性和安全性。
13.Vector API(第二孵化器)
作為孵化 API集成到JDK 16中,與平臺無關的矢量 API將在 JDK 17 中再次孵化,提供一種機制來表達矢量計算,這些計算在運行時可靠地編譯為支持的 CPU 架構上的最佳矢量指令。這比等效的標量計算獲得了更好的性能。在 JDK 17 中,向量 API 已針對性能和實現進行了增強,包括在字節向量與布爾數組之間進行轉換的增強功能。
14.特定于上下文的反序列化過濾器
允許應用程序通過調用 JVM 范圍的過濾器工廠來配置特定于上下文和動態選擇的反序列化過濾器,以便為每個序列化操作選擇一個過濾器。在解釋該提議背后的動機時,Oracle 表示反序列化不受信任的數據是一種固有的危險活動,因為傳入數據流的內容決定了創建的對象、其字段的值以及它們之間的引用。在許多用途中,流中的字節是從未知、不受信任或未經身份驗證的客戶端接收的。通過仔細構建流,攻擊者可以導致惡意執行任意類中的代碼。如果對象構造具有改變狀態或調用其他操作的副作用,則這些操作可能會危及應用程序對象的完整性,庫對象和 Java 運行時。禁用序列化攻擊的關鍵是防止任意類的實例被反序列化,從而防止直接或間接執行它們的方法。反序列化過濾器被引入Java 9使應用程序和庫代碼能夠在反序列化之前驗證傳入的數據流。此代碼java.io.ObjectInputFilter在創建反序列化流時提供驗證邏輯。但是,依賴流的創建者來明確請求驗證有局限性。JDK Enhancement Proposal 290通過引入可通過 API、系統屬性或安全屬性設置的 JVM 范圍的反序列化過濾器解決了這些限制,但這種方法也有局限性,尤其是在復雜的應用程序中。更好的方法是配置每個流過濾器,這樣它們就不需要每個流創建者的參與。計劃中的增強應幫助開發人員為每個反序列化上下文和用例構建和應用適當的過濾器。
總結
以上是生活随笔為你收集整理的JAVA 17版本介绍(二)新特性介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国移动或将对电信和联通的固网业务举起屠
- 下一篇: insert into select 插