App下載

Java版本新發(fā)現(xiàn):JDK15的14個(gè)新特性和變化

猿友 2020-09-05 15:20:26 瀏覽數(shù) (7622)
反饋

Java Development Kit 15Oracle 對(duì) Java SE(標(biāo)準(zhǔn)版)下一個(gè)版本的實(shí)現(xiàn),已于8月初進(jìn)入了發(fā)布候選階段。JDK 15 的亮點(diǎn)包括文本塊、隱藏類(lèi)、外部?jī)?nèi)存訪(fǎng)問(wèn) API ,以及密封類(lèi)和記錄的預(yù)覽。

OpenJDK 15的新特性和變化包括:

1)外內(nèi)存訪(fǎng)問(wèn)API(foreign-memory access API)

外內(nèi)存訪(fǎng)問(wèn) API 的第二個(gè)孵化器,它將使 Java 程序能夠安全和有效地訪(fǎng)問(wèn) Java 堆之外的外部?jī)?nèi)存。此 API 能夠操作各種類(lèi)型的外部?jī)?nèi)存,如本機(jī)、持久和托管堆。有許多 Java 程序是訪(fǎng)問(wèn)外部?jī)?nèi)存的,比如 IgniteMapDB。該API將有助于避免與垃圾收集相關(guān)的成本以及與跨進(jìn)程共享內(nèi)存以及通過(guò)將文件映射到內(nèi)存來(lái)序列化和反序列化內(nèi)存內(nèi)容相關(guān)的不可預(yù)測(cè)性。該Java API目前沒(méi)有為訪(fǎng)問(wèn)外部?jī)?nèi)存提供令人滿(mǎn)意的解決方案。但是在新的提議中,API不應(yīng)該破壞JVM的安全性。在JDK 14中,這個(gè)功能正在經(jīng)歷早期的孵化階段,在JDK 15中還提供了改進(jìn)。

2)密封類(lèi)(sealed classes)的預(yù)覽

與接口一樣,密封類(lèi)也限制其他類(lèi)或接口可以擴(kuò)展或?qū)崿F(xiàn)它們。這個(gè)特性的目標(biāo)包括——允許類(lèi)或接口的作者來(lái)控制哪些代碼負(fù)責(zé)實(shí)現(xiàn)、提供了比限制使用超類(lèi)的訪(fǎng)問(wèn)修飾符聲明方式更多選擇,并通過(guò)支持對(duì)模式的詳盡分析而支持模式匹配的未來(lái)發(fā)展。

3)相關(guān)支持的刪除

刪除對(duì)Solaris/SPARC、Solaris/x64Linux/SPARC端口的源代碼和構(gòu)建支持,而在JDK 14中不贊成刪除這些端口,但可在將來(lái)的版本中刪除它們。許多正在開(kāi)發(fā)的項(xiàng)目和功能(如Valhalla、Loom和Panama)需要進(jìn)行重大更改以適應(yīng) CPU 架構(gòu)和操作系統(tǒng)特定代碼。放棄對(duì)SolarisSPARC端口的支持將使OpenJDK社區(qū)的貢獻(xiàn)者加快開(kāi)發(fā)新特性,從而推動(dòng)平臺(tái)向前發(fā)展。近年來(lái),SolarisSPARC都被Linux操作系統(tǒng)和Intel處理器所取代。

4)記錄結(jié)構(gòu)(Records)

記錄是充當(dāng)不可變數(shù)據(jù)的透明載體類(lèi),在 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)的方法,如如equalsassessors,并保留 Java 中長(zhǎng)期存在的原則,如名義類(lèi)型和遷移兼容性 。Records(記錄)可以被認(rèn)為是名義元組。

5)數(shù)字簽名算法

基于Edwards-Curve數(shù)字簽名算法(EdDSA-Edwards-Curve Digital Signature Algorithm)的加密簽名。EdDSA是一種現(xiàn)代的橢圓曲線(xiàn)方案,具有 JDK 中現(xiàn)有簽名方案的優(yōu)點(diǎn)。EdDSA將只在SunEC提供商中實(shí)現(xiàn)。EdDSA與其他簽名方案相比,具有更高的安全性和性能,因此備受關(guān)注;它已經(jīng)在OpenSSLBoringSSL等加密庫(kù)中得到支持。

6)套接字的更新實(shí)現(xiàn)

通過(guò)將java.net.datagram.Socketjava.net.MulticastSocket API的底層實(shí)現(xiàn)替換為更簡(jiǎn)單、更現(xiàn)代的實(shí)現(xiàn)來(lái)重新實(shí)現(xiàn)遺留的DatagramSocket API。新的實(shí)現(xiàn):

1.易于調(diào)試和維護(hù);

2.與Project Loom中正在探索的虛擬線(xiàn)程協(xié)同。

新的計(jì)劃是 JDK Enhancement Proposal 353的后續(xù),該方案重新實(shí)現(xiàn)了遺留的套接字 API。java.net.datagram.Socketjava.net.MulticastSocket的當(dāng)前實(shí)現(xiàn)可以追溯到 JDK 1.0,那時(shí) IPv6 還在開(kāi)發(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)化來(lái)減少非競(jìng)爭(zhēng)鎖定的開(kāi)銷(xiāo)。盡管某些 Java 應(yīng)用程序在禁用偏向鎖后可能會(huì)出現(xiàn)性能下降,但偏向鎖的性能提高通常不像以前那么明顯。

8)instanceof模式匹配

此為第二個(gè)預(yù)覽版,之前是 JDK 14 中的首次預(yù)覽。模式匹配允許程序中的通用邏輯(主要是有條件地從對(duì)象中提取組件)得到更精確的表達(dá)。像Haskellc#這樣的語(yǔ)言已經(jīng)包含了模式匹配,因?yàn)樗暮?jiǎn)易性和安全性。

9)隱藏類(lèi)(Hidden classes)

即不能被其他類(lèi)的字節(jié)碼直接使用的類(lèi),是為在運(yùn)行時(shí)生成類(lèi)并通過(guò)反射間接使用類(lèi)的框架使用的。隱藏類(lèi)可以定義為訪(fǎng)問(wèn)控制嵌套的成員,并且可以獨(dú)立于其他類(lèi)卸載。該提議將通過(guò)支持一個(gè)標(biāo)準(zhǔn) API 來(lái)定義不可發(fā)現(xiàn)且生命周期有限的隱藏類(lèi),從而提高 JVM 上所有語(yǔ)言的效率。JDK 內(nèi)部和外部的框架將能夠動(dòng)態(tài)生成類(lèi),而這些類(lèi)可以定義隱藏類(lèi)。許多構(gòu)建在 JVM 上的語(yǔ)言都依賴(lài)動(dòng)態(tài)類(lèi)生成來(lái)獲得靈活性和效率。這個(gè)提議的目標(biāo)包括:允許框架將類(lèi)定義為無(wú)法發(fā)現(xiàn)的框架實(shí)現(xiàn)細(xì)節(jié),這樣它們就不能被其他類(lèi)鏈接,也不能通過(guò)反射被發(fā)現(xiàn);支持?jǐn)U展帶有不可發(fā)現(xiàn)類(lèi)的訪(fǎng)問(wèn)控制嵌套;并支持主動(dòng)卸載不可發(fā)現(xiàn)的類(lèi),因此框架可以根據(jù)需要靈活地定義多個(gè)類(lèi)。另一個(gè)目標(biāo)是棄用非標(biāo)準(zhǔn)API misc.Unsafe::defineAnonymousClass,目的是為了在將來(lái)的版本中刪除。另外, 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 開(kāi)發(fā)人員決定應(yīng)該小心地、逐步地引入這種規(guī)模和復(fù)雜性的特性。從那時(shí)起,添加了許多改進(jìn),從并發(fā)類(lèi)卸載、未使用內(nèi)存的解除提交、對(duì)類(lèi)數(shù)據(jù)共享的支持到改進(jìn)的 NUMA 感知和多線(xiàn)程堆預(yù)處理。此外,最大堆大小從4TB增加到16TB。支持的平臺(tái)包括Linux、WindowsMacOS

11)文本塊

JDK 14JDK 13中都預(yù)覽版文本塊,它旨在簡(jiǎn)化編寫(xiě) Java 程序的任務(wù),方法是簡(jiǎn)化表達(dá)跨越幾行源代碼的字符串,同時(shí)在常見(jiàn)情況下避免轉(zhuǎn)義序列。文本塊是一個(gè)多行字符串文字,它可以避免使用大多數(shù)轉(zhuǎn)義序列、自動(dòng)以可預(yù)測(cè)的方式格式化字符串,并在需要時(shí)為開(kāi)發(fā)人員提供對(duì)格式的控制。文本塊建議的一個(gè)目標(biāo)是增強(qiáng) Java 程序中表示用非J Java 語(yǔ)言編寫(xiě)的代碼的字符串的可讀性。另一個(gè)目標(biāo)是通過(guò)規(guī)定任何新構(gòu)造都可以將相同的字符串集表示為字符串文字,解釋相同的轉(zhuǎn)義序列,并以與字符串文字相同的方式操作,從而支持字符串文字的遷移。OpenJDK 開(kāi)發(fā)人員希望添加轉(zhuǎn)義序列來(lái)管理顯式的空格和換行控件。

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)用Nashornjjs命令行工具。

14)RMI Activation進(jìn)入不推薦期

不推薦 RMI 激活機(jī)制,以便將來(lái)刪除。RMI 激活機(jī)制是 RMI 中一個(gè)過(guò)時(shí)的部分,自 Java 8 以來(lái)一直是可選的。RMI 激活機(jī)制增加了持續(xù)的維護(hù)負(fù)擔(dān)。RMI 的其他部分將不被棄用。

JDK 15的早期訪(fǎng)問(wèn)版本可以在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ì)大家有所幫助。

0 人點(diǎn)贊