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