Java 15 即將到來,新特性速覽!
掃描二維碼
隨時隨地手機看文章
按照 Oracle 六個月一更新的周期來看,JDK 15 即將于今年 9 月 15 日發(fā)布。據(jù)了解,目前新版的 Java 處于發(fā)布候選階段,包含文本塊、垃圾收集器、隱藏類以及模式匹配和記錄的功能預覽版。
在發(fā)布前夕,我們不妨先一窺新版 JDK 的新特性:
第二個外部內(nèi)存訪問 API(孵化階段),它將使 Java 程序安全高效地訪問 Java 堆以外的外部存儲器。該 API 應該能夠在各種外部內(nèi)存(如本機、持久和托管堆)上進行操作。許多 Java 程序訪問外部存儲器,如 lgnite 和 MapDB。API 有助于避免與垃圾回收相關的成本和不可預測性,跨進程共享內(nèi)存以及通過將文件映射到內(nèi)存,來序列化和取消序列化內(nèi)存內(nèi)容。Java API 目前無法提供令人滿意的訪問外部內(nèi)存的解決方案。但是,隨著新提案的提出,API 不應損害 JVM 的安全性。此功能正在 JDK 14 中進入較早的孵化器階段,JDK 15 中提供了改進。
密封類的預覽版。密封類與接口一起限制其他類或接口可以擴展或?qū)崿F(xiàn)它們。此功能的目標包括允許類或接口的開發(fā)者控制負責實現(xiàn)該代碼,提供比訪問修飾符更具聲明性的方式來限制超類的使用,以及通過支持詳盡的內(nèi)容來支持模式匹配的未來方向。
刪除源代碼并構建對 Solaris/SPARC、Solaris/x64 和 Linux/SPARC 端口的支持,這些端口在 JDK 14 中已棄用,目的是在將來的版本中刪除它們。許多項目和功能在開發(fā)中,如 Valhalla、Loom 和 Panama 都需要對 CPU 架構和操作系統(tǒng)特定的代碼進行重大更改。放棄對 Solaris 和 SPARC 端口的支持將使 OpenJDK 社區(qū)的貢獻者能夠加速開發(fā)新功能,從而推動平臺向前發(fā)展。近年來,Solaris 和 SPARC 都已被 Linux 操作系統(tǒng)和英特爾處理器取代。
記錄是充當不可變數(shù)據(jù)的透明載體的類,在 JDK 14 中作為早期預覽版首次亮相后,將包含在 JDK 15 中的第二個預覽版本中。該計劃的目標包括設計一個面向?qū)ο蟮臉嬙欤摌嬙毂硎局档暮唵尉酆?,幫助程序員專注于對不可變數(shù)據(jù)建模,而不是可擴展行為,自動實現(xiàn)數(shù)據(jù)驅(qū)動方法(如等值器和評估器),以及保留長期存在的 Java 原則(如名義類型和遷移兼容性)。記錄可視為名義元組。
基于愛德華茲曲線數(shù)字簽名算法(EdDSA) 的加密簽名。EdDSA 是一種現(xiàn)代橢圓曲線方案,與 JDK 中現(xiàn)有的簽名方案相比具有優(yōu)勢。EdDSA 將僅在 SunEC 提供程序中實現(xiàn)。與其他簽名方案相比,EdDSA 的安全性和性能有所提高,因此對其需求更為強烈,目前,它已在 OpenSSL 和 BoringSSL 等加密庫中得到支持。
通過替換 java.net.datagram 的基礎實現(xiàn),重新實現(xiàn)舊版 DatagramSocket API。Socket 和 java.net.MulticastSocket API 具有更簡單、更現(xiàn)代的實現(xiàn)方式,即:1. 易于調(diào)試和維護;2. 與 Project Loom 中正在探索的虛擬線程一起使用。新計劃是 JDK 增強建議 353 的后續(xù)行動,該提案重新實現(xiàn)舊版 Socket API。java.net.datagram.Socket 和 java.net.MulticastSocket 的當前實現(xiàn)可追溯到 JDK 1.0,而 IPv6 仍在開發(fā)中。因此,MulticastSocket 的當前實現(xiàn)嘗試以難以維護的方式協(xié)調(diào) IPv4 和 IPv6。
默認情況下,禁用偏向鎖定,并棄用所有相關的命令行選項。該目的是確定是否需要繼續(xù)支持昂貴、具有維護成本的偏向鎖定的傳統(tǒng)同步優(yōu)化,該優(yōu)化用于 HotSpot 虛擬機,以減少無可調(diào)整鎖定的開銷。盡管某些 Java 應用程序可能會看到禁用偏鎖定時性能下降,但偏置鎖定的性能提升通常不如以前明顯。
繼 JDK 14 中的前一個預覽之后,第二個模式匹配預覽。模式匹配允許程序中的通用邏輯(主要是從對象中的條件提取組件)可以更簡潔地表達。Haskell 和 C# 等語言已采用模式匹配來實現(xiàn)簡潔和安全性。
隱藏類。即不能由其他類的字節(jié)碼直接使用的類,供在運行時生成類并通過反射間接使用它們的框架使用。隱藏類可以定義為訪問控制嵌套的成員,并且可以獨立于其他類進行卸載。該提案通過啟用標準 API 來定義無法發(fā)現(xiàn)且具有有限生命周期的隱藏類,從而提高 JVM 上所有語言的效率。JDK 內(nèi)外的框架將能夠動態(tài)生成類,而這些類可以定義隱藏類?;?JVM 的許多語言都依賴于動態(tài)類生成,以實現(xiàn)靈活性和效率。該提案的目標包括:允許框架將類定義為框架的不可發(fā)現(xiàn)的實現(xiàn)細節(jié),以便其他類不能將其鏈接,也不能通過反射發(fā)現(xiàn);支持使用不可發(fā)現(xiàn)類擴展訪問控制嵌套;并支持主動卸載不可發(fā)現(xiàn)類,因此框架可以靈活地定義盡可能多的類。另一個目標是棄用非標準 API misc.Unsafe::defineAnonymousClass,目的是在將來的版本中棄用。此外,Java 語言不會因此建議而更改。
根據(jù)提案,Z 垃圾收集器 (ZGC)將從實驗版本過渡到產(chǎn)品中。ZGC 最初集成在 2018 年 9 月的 JDK 11 中,是一個可擴展的低延遲垃圾回收器。ZGC 是作為實驗功能引入的,因為 Java 開發(fā)人員認為,這種規(guī)模和復雜性的功能應該謹慎且逐步地引入。自 2018 年以來,ZGC 已增加了許多改進,從并發(fā)類卸載、取消使用未使用的內(nèi)存、對類數(shù)據(jù)共享的支持到改進的 NUMA 感知。此外,最大堆大小從 4 TB 增加到 16 TB。支持的平臺包括 Linux、Windows 和 MacOS。
文本塊。這一功能在 JDK 14 和 JDK 13 中都已實現(xiàn)預覽版。它跨越多行源代碼,同時避免在常見情況下的轉義序列,從而簡化編寫 Java 程序的任務。文本塊是一個字符串文字,它避免了大多數(shù)轉義序列,以可預測的方式自動格式化字符串,并根據(jù)需要為開發(fā)人員提供了對該格式的控制權。文本塊建議的目標是提高 Java 程序中的字符串的可讀性,這些字符串表示以非 Java 語言編寫的代碼。另一個目標是支持從字符串文本遷移,規(guī)定任何新構造都可以表達與字符串文本相同的字符串集,解釋相同的轉義序列,并且以與字符串文本相同的方式進行操作。OpenJDK 開發(fā)人員希望添加轉義序列來管理顯式空白和換行控件。
刪除 Nashorn。該功能是 2014 年 3 月發(fā)布的 JDK 8 的新特性,但此后沒多久就被諸如 GraalVM 等技術淘汰。根據(jù)提案,OpenJDK 15 建議要求刪除 Nashorn API 和用于調(diào)用 Nashorn 的 jjs 命令行工具。
棄用 RMI 激活機制,這也是為了將來為這一功能移除做準備。事實上,自 Java 8 以來,RMI 激活機制一直作為是可選項而非必選項,這也被視為是 RMI 中過時的部分。當下,RMI 的激活機制如果不棄用會造成維護負擔。同時據(jù)了解,RMI 的其他部分暫時不會被棄用。
目前,JDK 15 的早期訪問版本可以嘗鮮:http://jdk.java.net/15/。繼長期版本 JDK 11 之后,JDK 12/13/14以及即將發(fā)布的 JDK 15 都將是一個短期版本。而下一個長期支持 (LTS) 版本將是 JDK 17,該版本預計于 2021 年 9 月發(fā)布。
那么對于即將發(fā)布的 JDK 15,你會更新嗎?
編譯:蘇宓
來源:CSDN(ID:CSDNnews)
免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!