JDK/Java 17 可能带来什么新特性?
點(diǎn)擊上方“朱小廝的博客”,選擇“設(shè)為星標(biāo)”
后臺(tái)回復(fù)"書(shū)",獲取
后臺(tái)回復(fù)“k8s”,可領(lǐng)取k8s資料
JDK/Java 16?已于今年 3 月份正式 GA,這是一個(gè)短期維護(hù)版本,僅有 6 個(gè)月的技術(shù)支持。下一個(gè)版本 JDK/Java 17 計(jì)劃于今年 9 月 14 日發(fā)布,這是一個(gè)長(zhǎng)期支持(LTS)版本,預(yù)計(jì) Oracle 將提供數(shù)年的擴(kuò)展支持。
JDK 17 現(xiàn)在已經(jīng)進(jìn)入了第二個(gè)也是最后一個(gè)候選版本階段(RC),目前最新版本是 Build 35。
按 InfoWorld 所述,OpenJDK JDK 17 的部分功能包括有:
Context-specific 反序列化過(guò)濾器允許應(yīng)用程序通過(guò)調(diào)用 JVM-wide filter factory 為每個(gè)序列化操作選擇過(guò)濾器,來(lái)配置 context-specific ?和 dynamically selected 的反序列化過(guò)濾器。
隨著 always-strict 浮點(diǎn)語(yǔ)義的恢復(fù),浮點(diǎn)運(yùn)算將保持一致的嚴(yán)格;而不是同時(shí)具有嚴(yán)格的浮點(diǎn)語(yǔ)義 (?strictfp) 和有著微妙出入的默認(rèn)浮點(diǎn)語(yǔ)義。這就為語(yǔ)言和 VM 恢復(fù)了原始的浮點(diǎn)語(yǔ)義,與 Java Standard Edition 1.2 中引入嚴(yán)格和默認(rèn)浮點(diǎn)模式之前的語(yǔ)義相匹配。
棄用 Security Manager,準(zhǔn)備在未來(lái)版本中移除。追溯到 Java 1.0,Security Manager 一直是保護(hù)客戶端 Java 代碼的主要手段,很少用于保護(hù)服務(wù)器端代碼。該提案的一個(gè)目標(biāo)是評(píng)估是否需要新的 API 或機(jī)制來(lái)解決使用 Security Manager 的特定狹窄用例,例如阻塞System::exit。計(jì)劃要求棄用 Security Manager 以與舊 Applet API 一起刪除,該 API 也計(jì)劃在 JDK 17 中棄用。
switch模式匹配預(yù)覽版擴(kuò)展了 Java 中的模式語(yǔ)言,允許switch表達(dá)式和語(yǔ)句可以針對(duì)多個(gè)模式進(jìn)行測(cè)試,每個(gè)模式都有特定的操作。這使得復(fù)雜的面向數(shù)據(jù)的查詢能夠簡(jiǎn)潔而安全地表達(dá)。此功能的目標(biāo)包括:通過(guò)使模式出現(xiàn)在案例標(biāo)簽中,來(lái)擴(kuò)展switch表達(dá)式和語(yǔ)句的表現(xiàn)力和應(yīng)用,在需要時(shí)放寬switch的 historical null-hostility,并引入兩種模式:guarded patterns,允許用任意的布爾表達(dá)式來(lái)完善模式匹配邏輯,以及parenthesized patterns,解決了一些解析歧義。在 JDK 16 中,instanceof運(yùn)算符被擴(kuò)展為采用類型模式并執(zhí)行模式匹配。提議的適度擴(kuò)展允許簡(jiǎn)化熟悉的 instanceof-and-cast 習(xí)語(yǔ)。
JDK 內(nèi)部的強(qiáng)封裝,除了sun.misc.Unsafe等關(guān)鍵的內(nèi)部 API 外,用戶將不再可能通過(guò)單個(gè)命令行選項(xiàng)來(lái) relax 對(duì)內(nèi)部元素的強(qiáng)封裝,這在 JDK 9 到 JDK 16 中是可行的。該計(jì)劃的目標(biāo)包括提高 JDK 的安全性和可維護(hù)性,并鼓勵(lì)開(kāi)發(fā)人員從內(nèi)部元素遷移到標(biāo)準(zhǔn) API。
刪除遠(yuǎn)程方法調(diào)用 (RMI) 激活機(jī)制,同時(shí)保留 RMI 的其余部分。RMI 激活機(jī)制已過(guò)時(shí)和廢棄,在 JDK 15 中不推薦使用。
在外部函數(shù)和 memory API 引入了一個(gè)孵化器階段,允許 Java 程序與 Java 運(yùn)行時(shí)之外的代碼和數(shù)據(jù)進(jìn)行互操作。API 計(jì)劃的目標(biāo)包括易用性、性能、通用性和安全性。
與平臺(tái)無(wú)關(guān)的矢量 API 作為孵化 API 集成到 JDK 16 中,將在 JDK 17 中再次孵化,提供一種機(jī)制來(lái)表達(dá)矢量計(jì)算,這些計(jì)算在運(yùn)行時(shí)可靠地編譯為支持的 CPU 架構(gòu)上的最佳矢量指令。這比等效的標(biāo)量計(jì)算獲得了更好的性能。在 JDK 17 中,向量 API 已針對(duì)性能和實(shí)現(xiàn)進(jìn)行了增強(qiáng),包括在字節(jié)向量與布爾數(shù)組之間進(jìn)行轉(zhuǎn)換的增強(qiáng)功能。
密封類和接口限制哪些其他類或接口可以擴(kuò)展或?qū)崿F(xiàn)它們。該提案的目標(biāo)包括允許類或接口的作者控制哪些代碼負(fù)責(zé)實(shí)現(xiàn)它,提供比訪問(wèn)修飾符更具聲明性的方式來(lái)限制超類的使用,并通過(guò)為模式的詳盡分析提供基礎(chǔ)來(lái)支持模式匹配的未來(lái)方向。
刪除實(shí)驗(yàn)性 AOT 和 JIT 編譯器,它們幾乎沒(méi)有使用,但需要大量維護(hù)工作。該計(jì)劃要求維護(hù) Java 級(jí)別的 JVM 編譯器接口,以便開(kāi)發(fā)人員可以繼續(xù)使用外部構(gòu)建的編譯器版本進(jìn)行 JIT 編譯。
將 JDK 移植到 MacOS/AArch64 以響應(yīng) Apple 將其 Macintosh 計(jì)算機(jī)從 x64 轉(zhuǎn)換到 AArch64 的計(jì)劃。針對(duì) MacOS/AArch64 的更改有可能破壞現(xiàn)有的 Linux/AArch64、Windows/AArch64 和 MacOS/x64 port,但這種風(fēng)險(xiǎn)可通過(guò)預(yù)集成測(cè)試來(lái)降低。
棄用 Applet API 以進(jìn)行刪除。這個(gè) API 本質(zhì)上是無(wú)關(guān)緊要的,因?yàn)樗?Web 瀏覽器供應(yīng)商要么已經(jīng)取消了對(duì) Java 瀏覽器插件的支持,要么已經(jīng)宣布了這樣做的計(jì)劃。Applet API 之前在 2017 年 9 月的 Java 9 中已被棄用,但并未刪除。
用于 MacOS 的新渲染管道,使用 Apple Metal API 作為使用已棄用 OpenGL API 的現(xiàn)有管道的替代方案。該提議旨在為使用 MacOS Metal 框架的 Java 2D API 提供一條功能齊全的渲染管道,為蘋(píng)果從未來(lái)版本的 MacOS 中刪除 OpenGL API 做好準(zhǔn)備。該管道旨在功能上與現(xiàn)有的 OpenGL 管道相當(dāng),在某些應(yīng)用程序和基準(zhǔn)測(cè)試中具有相同或更好的性能。將創(chuàng)建適合當(dāng)前 Java 2D 模型的干凈架構(gòu)。管道將與 OpenGL 管道共存,直到被淘汰。本提案的目的并不是添加任何新的 Java 或 JDK API。
增強(qiáng)的偽隨機(jī)數(shù)生成器將為偽隨機(jī)數(shù)生成器(PRNG)提供新的接口類型和實(shí)現(xiàn),包括可跳轉(zhuǎn)的 PRNG 和額外的一類可拆分 PRNG 算法 (LXM)。新接口RandomGenerator將為所有現(xiàn)有的和新的 PRNG 提供統(tǒng)一的 API;將提供四個(gè)專門(mén)的 RandomGenerator 接口。該計(jì)劃的動(dòng)機(jī)是關(guān)注 Java 中偽隨機(jī)數(shù)生成領(lǐng)域的多個(gè)改進(jìn)領(lǐng)域。這項(xiàng)工作不需要提供許多其他 PRNG 算法的實(shí)現(xiàn)。但是已經(jīng)添加了三種常用算法,這些算法已經(jīng)廣泛部署在其他編程語(yǔ)言環(huán)境中。該計(jì)劃的目標(biāo)包括:
使在應(yīng)用程序中交替使用各種 PRNG 算法變得更容易。
改進(jìn)了對(duì)基于流的編程的支持,提供了 PRNG 對(duì)象流。
消除現(xiàn)有 PRNG 類中的代碼重復(fù)。
保留類java.util.Random的現(xiàn)有行為。
JDK 17 等 LTS 版本每三年發(fā)布一次,上一個(gè)LTS 版本?JDK 11?于 2018 年 9 月發(fā)布。
詳情可查看:https://jdk.java.net/17/?
想知道更多?掃描下面的二維碼關(guān)注我后臺(tái)回復(fù)"技術(shù)",加入技術(shù)群后臺(tái)回復(fù)“k8s”,可領(lǐng)取k8s資料【精彩推薦】ClickHouse到底是什么?為什么如此牛逼!
原來(lái)ElasticSearch還可以這么理解
面試官:InnoDB中一棵B+樹(shù)可以存放多少行數(shù)據(jù)?
架構(gòu)之道:分離業(yè)務(wù)邏輯和技術(shù)細(xì)節(jié)
星巴克不使用兩階段提交
面試官:Redis新版本開(kāi)始引入多線程,談?wù)勀愕目捶?#xff1f;
喜馬拉雅自研網(wǎng)關(guān)架構(gòu)演進(jìn)過(guò)程
收藏:存儲(chǔ)知識(shí)全面總結(jié)
微博千萬(wàn)級(jí)規(guī)模高性能高并發(fā)的網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)
總結(jié)
以上是生活随笔為你收集整理的JDK/Java 17 可能带来什么新特性?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021大厂面试高频100题最新汇总(附
- 下一篇: 用了Elasticsearch后,查询起