東莞易思訓(xùn)教育

7x24小時(shí)咨詢熱線

400-660-3310

當(dāng)前位置 : 好學(xué)校 東莞易思訓(xùn)教育 學(xué)習(xí)資訊 資訊詳情

Java16正式發(fā)布版本的新特性

2021-08-13

Java16累計(jì)修復(fù)了1897個(gè)問(wèn)題,其中,有1397個(gè)由甲骨文工作人員完成,還有500個(gè)由個(gè)人開發(fā)人員和其他組織機(jī)構(gòu)的開發(fā)人員貢獻(xiàn),包括ARM、SAP、RedHat和騰訊以及微軟、英特爾、華為等。而一些小型組織也貢獻(xiàn)了Java16中3%的修復(fù),比如AmpereComputing、Bellsoft、DataDog、Microdoc和獨(dú)立開發(fā)人員。

伴隨著數(shù)千個(gè)性能、穩(wěn)定性和安全性更新,Java16為用戶提供了十七項(xiàng)主要的增強(qiáng)/更改(稱為JDK增強(qiáng)提案——JEP),包括三個(gè)孵化器模塊和一個(gè)預(yù)覽特性。

java16正式發(fā)布版本的新特性

Java16隨附的17個(gè)JEP分為六個(gè)不同類別:

新語(yǔ)言特性

JEP394,適用于instanceof的模式匹配

模式匹配(PatternMatching)最早在Java14中作為預(yù)覽特性引入,在Java15中還是預(yù)覽特性。模式匹配通過(guò)對(duì)instacneof運(yùn)算符進(jìn)行模式匹配來(lái)增強(qiáng)Java編程語(yǔ)言。

模式匹配使程序中的通用邏輯(即從對(duì)象中有條件地提取組件)得以更簡(jiǎn)潔、更安全地表示。

JEP395,記錄

記錄(Records)在Java14和Java15中作為預(yù)覽特性引入。它提供了一種緊湊的語(yǔ)法來(lái)聲明類,這些類是淺層不可變數(shù)據(jù)的透明持有者。這將大大簡(jiǎn)化這些類,并提高代碼的可讀性和可維護(hù)性。

JVM改進(jìn)

JEP376,ZGC并發(fā)線程處理

JEP376將ZGC線程棧處理從安全點(diǎn)轉(zhuǎn)移到一個(gè)并發(fā)階段,甚至在大堆上也允許在毫秒內(nèi)暫停GC安全點(diǎn)。消除ZGC垃圾收集器中后面一個(gè)延遲源可以極大地提高應(yīng)用程序的性能和效率。

JEP387,彈性元空間

此特性可將未使用的HotSpot類元數(shù)據(jù)(即元空間,metaspace)內(nèi)存更快速地返回到操作系統(tǒng),從而減少元空間的占用空間。具有大量類加載和卸載活動(dòng)的應(yīng)用程序可能會(huì)占用大量未使用的空間。新方案將元空間內(nèi)存按較小的塊分配,它將未使用的元空間內(nèi)存返回給操作系統(tǒng)來(lái)提高彈性,從而提高應(yīng)用程序性能并降低內(nèi)存占用。

新工具和庫(kù)

JEP380,Unix-Domain套接字通道

Unix-domain套接字一直是大多數(shù)Unix平臺(tái)的一個(gè)特性,現(xiàn)在在Windows10和WindowsServer2019也提供了支持。此特性為java.nio.channels包的套接字通道和服務(wù)器套接字通道API添加了Unix-domain(AF_UNIX)套接字支持。它擴(kuò)展了繼承的通道機(jī)制以支持Unix-domain套接字通道和服務(wù)器套接字通道。Unix-domain套接字用于同一主機(jī)上的進(jìn)程間通信(IPC)。它們?cè)诤艽蟪潭壬项愃朴赥CP/IP,區(qū)別在于套接字是通過(guò)文件系統(tǒng)路徑名而不是Internet協(xié)議(IP)地址和端口號(hào)尋址的。對(duì)于本地進(jìn)程間通信,Unix-domain套接字比TCP/IP環(huán)回連接更安全、更有效。

JEP392,打包工具

此特性最初是作為Java14中的一個(gè)孵化器模塊引入的,該工具允許打包自包含的Java應(yīng)用程序。它支持原生打包格式,為最終用戶提供自然的安裝體驗(yàn),這些格式包括Windows上的msi和exe、macOS上的pkg和dmg,還有Linux上的deb和rpm。它還允許在打包時(shí)指定啟動(dòng)時(shí)參數(shù),并且可以從命令行直接調(diào)用,也可以通過(guò)ToolProviderAPI以編程方式調(diào)用。注意jpackage模塊名稱從jdk.incubator.jpackage更改為jdk.jpackage。這將改善最終用戶在安裝應(yīng)用程序時(shí)的體驗(yàn),并簡(jiǎn)化了“應(yīng)用商店”模型的部署。

為未來(lái)做好準(zhǔn)備

JEP390,對(duì)基于值的類發(fā)出警告

此特性將原始包裝器類(java.lang.Integer、java.lang.Double等)指定為基于值的(類似于java.util.Optional和java.time.LocalDateTime),并在其構(gòu)造器中添加forRemoval(自JDK9開始被棄用),這樣會(huì)提示新的警告。在Java平臺(tái)中嘗試在任何基于值的類的實(shí)例上進(jìn)行不正確的同步時(shí),它會(huì)發(fā)出警告。

許多流行的開源項(xiàng)目已經(jīng)在其源中刪除了包裝構(gòu)造器調(diào)用來(lái)響應(yīng)Java9的棄用警告,并且鑒于“棄用移除”警告的緊迫性,我們可以期望更多開源項(xiàng)目跟上這一步伐。

JEP396,默認(rèn)強(qiáng)封裝JDK內(nèi)部元素

此特性會(huì)默認(rèn)強(qiáng)封裝JDK的所有內(nèi)部元素,但關(guān)鍵內(nèi)部API(例如sun.misc.Unsafe)除外。默認(rèn)情況下,使用早期版本成功編譯的訪問(wèn)JDK內(nèi)部API的代碼可能不再起作用。鼓勵(lì)開發(fā)人員從使用內(nèi)部元素遷移到使用標(biāo)準(zhǔn)API的方法上,以便他們及其用戶都可以無(wú)縫升級(jí)到將來(lái)的Java版本。強(qiáng)封裝由JDK9的啟動(dòng)器選項(xiàng)–illegal-access控制,到JDK15默認(rèn)改為warning,從JDK16開始默認(rèn)為deny。(目前)仍然可以使用單個(gè)命令行選項(xiàng)放寬對(duì)所有軟件包的封裝,將來(lái)只有使用–add-opens打開特定的軟件包才行。

孵化器和預(yù)覽特性

JEP338,向量API(孵化器)

該孵化器API提供了一個(gè)API的初始迭代以表達(dá)一些向量計(jì)算,這些計(jì)算在運(yùn)行時(shí)可靠地編譯為支持的CPU架構(gòu)上的比較佳向量硬件指令,從而獲得優(yōu)于同等標(biāo)量計(jì)算的性能,充分利用單指令多數(shù)據(jù)(SIMD)技術(shù)(大多數(shù)現(xiàn)代CPU上都可以使用的一種指令)。盡管HotSpot支持自動(dòng)向量化,但是可轉(zhuǎn)換的標(biāo)量操作集有限且易受代碼更改的影響。該API將使開發(fā)人員能夠輕松地用Java編寫可移植的高性能向量算法。

JEP389,外部鏈接器API(孵化器)

該孵化器API提供了靜態(tài)類型、純Java訪問(wèn)原生代碼的特性,該API將大大簡(jiǎn)化綁定原生庫(kù)的原本復(fù)雜且容易出錯(cuò)的過(guò)程。Java1.1就已通過(guò)Java原生接口(JNI)支持了原生方法調(diào)用,但并不好用。Java開發(fā)人員應(yīng)該能夠?yàn)樘囟ㄈ蝿?wù)綁定特定的原生庫(kù)。它還提供了外來(lái)函數(shù)支持,而無(wú)需任何中間的JNI粘合代碼。

JEP393,外部存儲(chǔ)器訪問(wèn)API(第3個(gè)孵化器)

在Java14和Java15中作為孵化器API引入的這個(gè)API使Java程序能夠安全有效地對(duì)各種外部存儲(chǔ)器(例如本機(jī)存儲(chǔ)器、持久性存儲(chǔ)器、托管堆存儲(chǔ)器等)進(jìn)行操作。它提供了外部鏈接器API的基礎(chǔ)。

JEP397,密封類(第二預(yù)覽)

這個(gè)預(yù)覽特性可以限制哪些類或接口可以擴(kuò)展或?qū)崿F(xiàn)它們;它允許類或接口的作者控制負(fù)責(zé)實(shí)現(xiàn)它的代碼;它還提供了比訪問(wèn)修飾符更具聲明性的方式來(lái)限制對(duì)超類的使用。它還通過(guò)對(duì)模式進(jìn)行詳盡的分析來(lái)支持模式匹配的未來(lái)發(fā)展。

提升OpenJDK開發(fā)人員的生產(chǎn)力

其余更改對(duì)Java開發(fā)人員(使用Java編寫代碼和運(yùn)行應(yīng)用程序的人員)不會(huì)直接可見(jiàn),而只對(duì)Java開發(fā)人員(參與OpenJDK開發(fā)的人員)可見(jiàn)。

JEP347,啟用C++14語(yǔ)言特性(在JDK源代碼中)

它允許在JDKC++源代碼中使用C++14語(yǔ)言特性,并提供在HotSpot代碼中可以使用哪些特性的具體指導(dǎo)。在JDK15中,JDK中C++代碼使用的語(yǔ)言特性僅限于C++98/03語(yǔ)言標(biāo)準(zhǔn)。它要求更新各種平臺(tái)編譯器的較低可接受版本

JEP357,從Mercurial遷移到Git;JEP369,遷移到GitHub

這些JEP將OpenJDK社區(qū)的源代碼存儲(chǔ)庫(kù)從Mercurial(hg)遷移到Git,并將它們托管在GitHub上以供JDK11及更高版本使用,其中包括將jcheck、webrev和defpath工具等工具更新到Git。Git減小了元數(shù)據(jù)的大小(約1/4),可節(jié)省本地磁盤空間并減少克隆時(shí)間。與Mercurial相比,現(xiàn)代工具鏈可以更好地與Git集成。

JEP386,AlpineLinux移植;JEP388,Windows/AArch64移植

這些JEP的重點(diǎn)不是移植工作本身,而是將它們集成到JDK主線存儲(chǔ)庫(kù)中;JEP386將JDK移植到AlpineLinux和其他使用musl作為x64上主要C庫(kù)的發(fā)行版上。此外,JEP388將JDK移植到WindowsAArch64(ARM64)。

收藏
分享到:

相關(guān)課程

相關(guān)資訊

東莞易思訓(xùn)教育

東莞易思訓(xùn)教育

認(rèn)證等級(jí)

信譽(yù)良好,可安心報(bào)讀

東莞易思訓(xùn)教育

已獲好學(xué)校V2信譽(yù)等級(jí)認(rèn)證

信譽(yù)值

  • (60-80)基礎(chǔ)信譽(yù)積累,可放心報(bào)讀
  • (81-90)良好信譽(yù)積累,可持續(xù)信賴
  • (91-100)充分信譽(yù)積累,推薦報(bào)讀

與好學(xué)校簽訂讀書保障協(xié)議:

  • 100%
  • 37
  • 1903
在線咨詢
;