Java Development Kit 15
是 Oracle 對 Java SE(標準版)下一個版本的實現,已于8月初進入了發(fā)布候選階段。JDK 15 的亮點包括文本塊、隱藏類、外部內存訪問 API ,以及密封類和記錄的預覽。
OpenJDK 15的新特性和變化包括:
1)外內存訪問API(foreign-memory access API)
外內存訪問 API 的第二個孵化器,它將使 Java 程序能夠安全和有效地訪問 Java 堆之外的外部內存。此 API 能夠操作各種類型的外部內存,如本機、持久和托管堆。有許多 Java 程序是訪問外部內存的,比如 Ignite
和MapDB
。該API將有助于避免與垃圾收集相關的成本以及與跨進程共享內存以及通過將文件映射到內存來序列化和反序列化內存內容相關的不可預測性。該Java API
目前沒有為訪問外部內存提供令人滿意的解決方案。但是在新的提議中,API
不應該破壞JVM
的安全性。在JDK 14
中,這個功能正在經歷早期的孵化階段,在JDK 15
中還提供了改進。
2)密封類(sealed classes)的預覽
與接口一樣,密封類也限制其他類或接口可以擴展或實現它們。這個特性的目標包括——允許類或接口的作者來控制哪些代碼負責實現、提供了比限制使用超類的訪問修飾符聲明方式更多選擇,并通過支持對模式的詳盡分析而支持模式匹配的未來發(fā)展。
3)相關支持的刪除
刪除對Solaris/SPARC
、Solaris/x64
和Linux/SPARC
端口的源代碼和構建支持,而在JDK 14
中不贊成刪除這些端口,但可在將來的版本中刪除它們。許多正在開發(fā)的項目和功能(如Valhalla、Loom和Panama)需要進行重大更改以適應 CPU 架構和操作系統特定代碼。放棄對Solaris
和SPARC
端口的支持將使OpenJDK
社區(qū)的貢獻者加快開發(fā)新特性,從而推動平臺向前發(fā)展。近年來,Solaris
和SPARC
都被Linux
操作系統和Intel
處理器所取代。
4)記錄結構(Records)
記錄是充當不可變數據的透明載體類,在 JDK 14 中作為早期預覽進行了首次調試之后,它將被包含在 JDK 15 的第二個預覽版本中。計劃的目標包括設計一個面向對象的結構,表達一個簡單的聚合值,幫助程序員關注建模不可變的數據,而不是擴展行為,自動實現數據驅動的方法,如如equals
和assessors
,并保留 Java 中長期存在的原則,如名義類型和遷移兼容性 。Records
(記錄)可以被認為是名義元組。
5)數字簽名算法
基于Edwards-Curve
數字簽名算法(EdDSA-Edwards-Curve Digital Signature Algorithm)的加密簽名。EdDSA
是一種現代的橢圓曲線方案,具有 JDK 中現有簽名方案的優(yōu)點。EdDSA
將只在SunEC
提供商中實現。EdDSA
與其他簽名方案相比,具有更高的安全性和性能,因此備受關注;它已經在OpenSSL
和BoringSSL
等加密庫中得到支持。
6)套接字的更新實現
通過將java.net.datagram.Socket
和java.net.MulticastSocket API
的底層實現替換為更簡單、更現代的實現來重新實現遺留的DatagramSocket API
。新的實現:
1.易于調試和維護;
2.與Project Loom中正在探索的虛擬線程協同。
新的計劃是 JDK Enhancement Proposal 353
的后續(xù),該方案重新實現了遺留的套接字 API。java.net.datagram.Socket
和java.net.MulticastSocket
的當前實現可以追溯到 JDK 1.0,那時 IPv6 還在開發(fā)中。因此,當前的多播套接字實現嘗試調和 IPv4 和 IPv6 難以維護的方式。
7)禁用偏向/偏置鎖定
在默認情況下禁用偏向鎖定,并棄用所有相關命令行選項。目標是確定是否需要繼續(xù)支持偏置鎖定的高維護成本的遺留同步優(yōu)化,HotSpot
虛擬機使用該優(yōu)化來減少非競爭鎖定的開銷。盡管某些 Java 應用程序在禁用偏向鎖后可能會出現性能下降,但偏向鎖的性能提高通常不像以前那么明顯。
8)instanceof模式匹配
此為第二個預覽版,之前是 JDK 14 中的首次預覽。模式匹配允許程序中的通用邏輯(主要是有條件地從對象中提取組件)得到更精確的表達。像Haskell
和c#
這樣的語言已經包含了模式匹配,因為它的簡易性和安全性。
9)隱藏類(Hidden classes)
即不能被其他類的字節(jié)碼直接使用的類,是為在運行時生成類并通過反射間接使用類的框架使用的。隱藏類可以定義為訪問控制嵌套的成員,并且可以獨立于其他類卸載。該提議將通過支持一個標準 API 來定義不可發(fā)現且生命周期有限的隱藏類,從而提高 JVM 上所有語言的效率。JDK 內部和外部的框架將能夠動態(tài)生成類,而這些類可以定義隱藏類。許多構建在 JVM 上的語言都依賴動態(tài)類生成來獲得靈活性和效率。這個提議的目標包括:允許框架將類定義為無法發(fā)現的框架實現細節(jié),這樣它們就不能被其他類鏈接,也不能通過反射被發(fā)現;支持擴展帶有不可發(fā)現類的訪問控制嵌套;并支持主動卸載不可發(fā)現的類,因此框架可以根據需要靈活地定義多個類。另一個目標是棄用非標準API misc.Unsafe::defineAnonymousClass
,目的是為了在將來的版本中刪除。另外, Java 語言不會因為這個建議而改變。
10)ZGC產品化
在這個提案下,Z垃圾收集器(ZGC-Z Garbage Collector)將從一個實驗特性升級為產品。 ZGC 集成到2018年9月發(fā)布的JDK 11中,是一個可擴展的、低延遲的垃圾收集器。 ZGC 是作為一種實驗性的功能引入的,因為 Java 開發(fā)人員決定應該小心地、逐步地引入這種規(guī)模和復雜性的特性。從那時起,添加了許多改進,從并發(fā)類卸載、未使用內存的解除提交、對類數據共享的支持到改進的 NUMA 感知和多線程堆預處理。此外,最大堆大小從4TB增加到16TB。支持的平臺包括Linux
、Windows
和MacOS
。
11)文本塊
JDK 14
和JDK 13
中都預覽版文本塊,它旨在簡化編寫 Java 程序的任務,方法是簡化表達跨越幾行源代碼的字符串,同時在常見情況下避免轉義序列。文本塊是一個多行字符串文字,它可以避免使用大多數轉義序列、自動以可預測的方式格式化字符串,并在需要時為開發(fā)人員提供對格式的控制。文本塊建議的一個目標是增強 Java 程序中表示用非J Java 語言編寫的代碼的字符串的可讀性。另一個目標是通過規(guī)定任何新構造都可以將相同的字符串集表示為字符串文字,解釋相同的轉義序列,并以與字符串文字相同的方式操作,從而支持字符串文字的遷移。OpenJDK 開發(fā)人員希望添加轉義序列來管理顯式的空格和換行控件。
12)LPT GC正式可用
Shenandoah
低暫停時間(low-pause-time)垃圾收集器將成為一個生產特性,不再處于實驗階段。它在一年前被集成到JDK 12中。
13)刪除Nashorn
2014年3月在jdk8中首次亮相的Nashorn
被移除,由于其被GraalVM
等技術淘汰。OpenJDK 15 提議要求刪除Nashorn APIs
和用于調用Nashorn
的jjs
命令行工具。
14)RMI Activation進入不推薦期
不推薦 RMI 激活機制,以便將來刪除。RMI 激活機制是 RMI 中一個過時的部分,自 Java 8 以來一直是可選的。RMI 激活機制增加了持續(xù)的維護負擔。RMI 的其他部分將不被棄用。
JDK 15的早期訪問版本可以在java.jdk.net
網站中找到。JDK 15將是一個短期的特性發(fā)布,根據 Oracle 的6個月發(fā)布周期,它將被支持6個月。下一個長期支持(LTS-long-term support)版本是JDK 17,預計將于2021年9月發(fā)布,它將獲得幾年的支持。當前的LTS版本是JDK 11,是于2018年9月發(fā)布。
以上就是W3Cschool編程獅
關于Java版本新發(fā)現:JDK15的14個新特性和變化的相關介紹了,希望對大家有所幫助。