資訊中心 Info
當前位置:愛尚教育 > 資訊中心 >
Java 16 新特性
發布日期:2021-09-18 閱讀次數:

據悉,按照甲骨文重要補丁更新(CPU)時間表,甲骨文 JDK 16 將至少獲得兩次季度更新。隨后,甲骨文 JDK 17 面世。雖然 Java 17 于 2021 年 9 月正式發布,但是 jdk.java.net 已經提供了它早期的訪問版本。

在轉向六個月的發布周期后,Java 16 是甲骨文發布的第七個特性版本。甲骨文稱,“在六個月的發布周期下,可用于生產的創新交付速度已大大提高”。

Java 16 累計修復了 1897 個問題,其中,有 1397 個由甲骨文工作人員完成,還有 500 個由個人開發人員和其他組織機構的開發人員貢獻,包括 ARM、SAP、RedHat 和騰訊以及微軟、英特爾、華為等。而一些小型組織也貢獻了 Java 16 中 3%的修復,比如 Ampere Computing、Bellsoft、DataDog、Microdoc 和獨立開發人員。

甲骨文表示,“再次使用 GPLv2 和 Classpath Exception 將 Java 16 作為甲骨文 OpenJDK 版本提供,并且針對使用甲骨文 JDK 版本作為甲骨文產品或服務一部分的用戶,或希望能獲得商業支持的用戶提供商業許可”。

Java 16 的新特性

伴隨著數千個性能、穩定性和安全性更新,Java 16 為用戶提供了十七項主要的增強 / 更改(稱為 JDK 增強提案——JEP),包括三個孵化器模塊和一個預覽特性。

孵化器模塊(Incubator Module)中引入了一些增強,這是一種將非最終 API 和非最終工具交給開發人員的方法,該方法允許用戶提供反饋,從而改善 Java 平臺的質量。

同樣,一些增強被作為 Java SE 平臺的預覽特性、語言或 VM 特性引入,這些增強已完全指定、完全實現但不是永久性的。JDK 特性版本中提供了這些增強,以推動開發人員根據實際使用情況提供反饋,這可能會導致它們在將來的版本中永久保留。這為用戶提供了及時反饋的機會,并讓工具供應商有機會在大量 Java 開發人員在生產中使用特性之前為其提供支持。

Java 16 隨附的 17 個 JEP 分為六個不同類別:

新語言特性

JEP 394,適用于 instanceof 的模式匹配

模式匹配(Pattern Matching)最早在 Java 14 中作為預覽特性引入,在 Java 15 中還是預覽特性。模式匹配通過對 instacneof 運算符進行模式匹配來增強 Java 編程語言。

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

JEP 395,記錄

記錄(Records)在 Java 14 和 Java 15 中作為預覽特性引入。它提供了一種緊湊的語法來聲明類,這些類是淺層不可變數據的透明持有者。這將大大簡化這些類,并提高代碼的可讀性和可維護性。

JVM 改進

JEP 376,ZGC 并發線程處理

JEP 376 將 ZGC 線程棧處理從安全點轉移到一個并發階段,甚至在大堆上也允許在毫秒內暫停 GC 安全點。消除 ZGC 垃圾收集器中最后一個延遲源可以極大地提高應用程序的性能和效率。

JEP 387,彈性元空間

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

新工具和庫

JEP 380,Unix-Domain 套接字通道

Unix-domain 套接字一直是大多數 Unix 平臺的一個特性,現在在 Windows 10 和 Windows Server 2019 也提供了支持。此特性為 java.nio.channels 包的套接字通道和服務器套接字通道 API 添加了 Unix-domain(AF_UNIX)套接字支持。它擴展了繼承的通道機制以支持 Unix-domain 套接字通道和服務器套接字通道。Unix-domain 套接字用于同一主機上的進程間通信(IPC)。它們在很大程度上類似于 TCP/IP,區別在于套接字是通過文件系統路徑名而不是 Internet 協議(IP)地址和端口號尋址的。對于本地進程間通信,Unix-domain 套接字比 TCP/IP 環回連接更安全、更有效。

JEP 392,打包工具

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

為未來做好準備

JEP 390,對基于值的類發出警告

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

許多流行的開源項目已經在其源中刪除了包裝構造器調用來響應 Java 9 的棄用警告,并且鑒于“棄用移除”警告的緊迫性,我們可以期望更多開源項目跟上這一步伐。

JEP 396,默認強封裝 JDK 內部元素

此特性會默認強封裝 JDK 的所有內部元素,但關鍵內部 API(例如 sun.misc.Unsafe)除外。默認情況下,使用早期版本成功編譯的訪問 JDK 內部 API 的代碼可能不再起作用。鼓勵開發人員從使用內部元素遷移到使用標準 API 的方法上,以便他們及其用戶都可以無縫升級到將來的 Java 版本。強封裝由 JDK 9 的啟動器選項–illegal-access 控制,到 JDK 15 默認改為 warning,從 JDK 16 開始默認為 deny。(目前)仍然可以使用單個命令行選項放寬對所有軟件包的封裝,將來只有使用–add-opens 打開特定的軟件包才行。

孵化器和預覽特性

JEP 338,向量 API(孵化器)

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

JEP 389,外部鏈接器 API(孵化器)

該孵化器 API 提供了靜態類型、純 Java 訪問原生代碼的特性,該 API 將大大簡化綁定原生庫的原本復雜且容易出錯的過程。Java 1.1 就已通過 Java 原生接口(JNI)支持了原生方法調用,但并不好用。Java 開發人員應該能夠為特定任務綁定特定的原生庫。它還提供了外來函數支持,而無需任何中間的 JNI 粘合代碼。

JEP 393,外部存儲器訪問 API(第 3 個孵化器)

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

JEP 397,密封類(第二預覽)

這個預覽特性可以限制哪些類或接口可以擴展或實現它們;它允許類或接口的作者控制負責實現它的代碼;它還提供了比訪問修飾符更具聲明性的方式來限制對超類的使用。它還通過對模式進行詳盡的分析來支持模式匹配的未來發展。

提升 OpenJDK 開發人員的生產力

其余更改對 Java 開發人員(使用 Java 編寫代碼和運行應用程序的人員)不會直接可見,而只對 Java 開發人員(參與 OpenJDK 開發的人員)可見。

JEP 347,啟用 C++14 語言特性(在 JDK 源代碼中)

它允許在 JDK C++ 源代碼中使用 C++14 語言特性,并提供在 HotSpot 代碼中可以使用哪些特性的具體指導。在 JDK 15 中,JDK 中 C++ 代碼使用的語言特性僅限于 C++98/03 語言標準。它要求更新各種平臺編譯器的最低可接受版本

JEP 357,從 Mercurial 遷移到 Git;JEP 369,遷移到 GitHub

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

JEP 386,AlpineLinux 移植;JEP 388,Windows/AArch64 移植

這些 JEP 的重點不是移植工作本身,而是將它們集成到 JDK 主線存儲庫中;JEP 386 將 JDK 移植到 Alpine Linux 和其他使用 musl 作為 x64 上主要 C 庫的發行版上。此外,JEP 388 將 JDK 移植到 Windows AArch64(ARM64)。

工具鏈支持

工具鏈有助于提高開發人員的生產力。目前,對 Java 16 提供支持的 IDE 有 JetBrainsIDEA、EclipseIDE。

甲骨文表示,“我們繼續歡迎領先的 IDE 供應商所做的努力,這些供應商的工具鏈解決方案為開發人員提供了對當前 Java 版本的支持”。

去年,Java 迎來 25 周年。根據 IDC 的最新報告“Java Turns 25”顯示,超過 900 萬名開發人員(全球專職開發人員中的 69%)在使用 Java——比其他任何語言都多。憑借自身不斷提高平臺性能、穩定性和安全性的能力,Java 一直是開發人員中最流行的編程語言,被譽為“宇宙第一語言”。

优彩-网址