JDK15正式發(fā)布(新增功能預(yù)覽)
JDK 15 在 2020 年 9 月 15 號正式發(fā)布了,這次發(fā)布的主要功能有:
- JEP 339:EdDSA 數(shù)字簽名算法
- JEP 360:密封類(預(yù)覽)
- JEP 371:隱藏類
- JEP 372:刪除 Nashorn JavaScript 引擎
- JEP 373:重新實(shí)現(xiàn) Legacy DatagramSocket API
- JEP 374:重新實(shí)現(xiàn) DatagramSocket API
- JEP 375:實(shí)例模式匹配(第二次預(yù)覽)
- JEP 377:ZGC:一個(gè)可擴(kuò)展的低延遲垃圾收集器
- JEP 378:文本塊
- JEP 379:低暫停時(shí)間垃圾收集器
- JEP 381:移除 Solaris 和 SPARC 端口
- JEP 383:外部存儲(chǔ)器訪問 API(第二個(gè)內(nèi)置程序)
- JEP 384:Records(第二次預(yù)覽)
- JEP 385:不推薦的 RMI 激活去除
JEP:JDK Enhancement Proposals,JDK 增強(qiáng)建議,也就是 JDK 的特性新增和改進(jìn)提案。
這些年發(fā)布的版本對應(yīng)的 JEPs 數(shù)量如下圖所示:

發(fā)布版本說明
根據(jù)發(fā)布的規(guī)劃,這次發(fā)布的 JDK 15 將是一個(gè)短期的過度版,只會(huì)被 Oracle 支持(維護(hù))6 個(gè)月,直到明年 3 月的 JDK 16 發(fā)布此版本將停止維護(hù)。而 Oracle 下一個(gè)長期支持版(LTS 版)會(huì)在明年的 9 月份候發(fā)布(Java 17),LTS 版每 3 年發(fā)布一個(gè),上一次長期支持版是 18 年 9 月發(fā)布的 JDK 11。
JDK 15 新功能說明
JDK 15 為用戶提供了十四項(xiàng)主要的增強(qiáng)/更改,包括一個(gè)孵化器模塊,三個(gè)預(yù)覽功能,兩個(gè)不推薦使用的功能以及兩個(gè)刪除功能。
1、EdDSA 數(shù)字簽名算法
新加入 Edwards-Curve 數(shù)字簽名算法(EdDSA)實(shí)現(xiàn)加密簽名。在許多其它加密庫(如 OpenSSL 和 BoringSSL)中得到支持。與 JDK 中的現(xiàn)有簽名方案相比,EdDSA 具有更高的安全性和性能。這是一個(gè)新的功能。
2、隱藏類
此功能可幫助需要在運(yùn)行時(shí)生成類的框架??蚣苌深愋枰?jiǎng)討B(tài)擴(kuò)展其行為,但是又希望限制對這些類的訪問。隱藏類很有用,因?yàn)樗鼈冎荒芡ㄟ^反射訪問,而不能從普通字節(jié)碼訪問。此外,隱藏類可以獨(dú)立于其他類加載,這可以減少框架的內(nèi)存占用。這是一個(gè)新的功能。
3、重新實(shí)現(xiàn) DatagramSocket API
重新實(shí)現(xiàn)舊版 DatagramSocket API,更簡單、更現(xiàn)代的實(shí)現(xiàn)來代替java.net.DatagramSocket和java.net.MulticastSocketAPI 的基礎(chǔ)實(shí)現(xiàn),提高了 JDK 的可維護(hù)性和穩(wěn)定性。
4、ZGC 功能轉(zhuǎn)正
ZGC 已由JEP 333集成到JDK 11 中,其目標(biāo)是通過減少 GC 停頓時(shí)間來提高性能。借助 JEP 377,ZGC 從預(yù)覽功能轉(zhuǎn)變?yōu)樯a(chǎn)功能。
5、文本塊功能轉(zhuǎn)正
文本塊由JEP 355在 2019 年提出,文本塊是一種多行字符串文字,它避免了大多數(shù)轉(zhuǎn)義序列的需要,以一種可預(yù)測的方式自動(dòng)設(shè)置字符串的格式,并在需要時(shí)使開發(fā)人員可以控制格式。借助 JEP 378,文本塊已成為 Java 語言的永久功能。
6、Shenandoah 垃圾回收算法轉(zhuǎn)正
Shenandoah 垃圾回收從實(shí)驗(yàn)特性變?yōu)楫a(chǎn)品特性。這是一個(gè)從 JDK 12 引入的回收算法,該算法通過與正在運(yùn)行的 Java 線程同時(shí)進(jìn)行疏散工作來減少 GC 暫停時(shí)間。Shenandoah 的暫停時(shí)間與堆大小無關(guān),無論堆棧是 200 MB 還是 200 GB,都具有相同的一致暫停時(shí)間。
7、密封類(預(yù)覽)
通過密封的類和接口來增強(qiáng) Java 編程語言,用于限制超類的使用,密封的類和接口限制其它可能繼承或?qū)崿F(xiàn)它們的其它類或接口。
8、instanceof 自動(dòng)匹配模式(預(yù)覽)
舊寫法:
// 先判斷類型
if (obj instanceof String) {
// 然后轉(zhuǎn)換
String s = (String) obj;
// 然后才能使用
}
新寫法:
if (obj instanceof String s) {
// 如果類型匹配 直接使用
} else {
// 如果類型不匹配則不能直接使用
}
這是第二次預(yù)覽該功能,我們已經(jīng)在 Java 14 中首次預(yù)覽過該特性。
9、Records Class(預(yù)覽)
Records Class 也是第二次出現(xiàn)的預(yù)覽功能,它在 JDK 14 中也出現(xiàn)過一次了,使用 Record 可以更方便的創(chuàng)建一個(gè)常量類,使用的前后代碼對比如下。
舊寫法:
class Point {
private final int x;
private final int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
int x() { return x; }
int y() { return y; }
public boolean equals(Object o) {
if (!(o instanceof Point)) return false;
Point other = (Point) o;
return other.x == x && other.y = y;
}
public int hashCode() {
return Objects.hash(x, y);
}
public String toString() {
return String.format("Point[x=%d, y=%d]", x, y);
}
}
新寫法:
record Point(int x, int y) { }
也就是說在使用了 record 之后,就可以用一行代碼編寫出一個(gè)常量類,并且這個(gè)常量類還包含了構(gòu)造方法、toString()、equals() 和 hashCode() 等方法。
10、外部存儲(chǔ)器訪問 API(預(yù)覽)
目的是引入一個(gè) API,以允許 Java 程序安全有效地訪問 Java 堆之外的外部內(nèi)存。這同樣是 Java 14 的一個(gè)預(yù)覽特性。
11、其它功能
其它功能里面還有一些棄用和不建議使用的功能,比如移除了 Nashorn JavaScript 引擎,同時(shí)也移除了刪除 Solaris 和 SPARC 端口,并標(biāo)記了一些棄用功能。
參考 & 鳴謝
碼農(nóng)小胖哥:https://mp.weixin.qq.com/s/rhfSLW0wfe73xgbRVvX46Q
官方日志:https://openjdk.java.net/projects/jdk/15/
到此這篇關(guān)于JDK15正式發(fā)布(新增功能預(yù)覽)的文章就介紹到這了,更多相關(guān)JDK15發(fā)布內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)
這篇文章主要介紹了Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
java 通過聚合查詢實(shí)現(xiàn)elasticsearch的group by后的數(shù)量
這篇文章主要介紹了java 通過聚合查詢實(shí)現(xiàn)elasticsearch的group by后的數(shù)量,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Java數(shù)據(jù)結(jié)構(gòu)之循環(huán)隊(duì)列簡單定義與用法示例
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之循環(huán)隊(duì)列簡單定義與用法,簡要描述了循環(huán)隊(duì)列的概念、原理,并結(jié)合實(shí)例形式分析了java循環(huán)隊(duì)列的定義與使用方法,需要的朋友可以參考下2017-10-10
SpringBoot yaml語法與數(shù)據(jù)讀取操作詳解
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語言)的遞歸縮寫。在開發(fā)的這種語言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
Java基于接口實(shí)現(xiàn)模擬動(dòng)物聲音代碼實(shí)例
這篇文章主要介紹了Java基于接口實(shí)現(xiàn)模擬動(dòng)物聲音代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
SpringBoot2.7.14整合redis7的詳細(xì)過程
這篇文章主要介紹了SpringBoot2.7.14整合redis7的詳細(xì)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10
Spring Boot 集成 RocketMQ 全流程指南(從依賴引入到消息收發(fā)
本文將通過 手動(dòng)連接 和 配置連接 兩種方式,詳細(xì)講解如何在 Spring Boot 中集成 RocketMQ,實(shí)現(xiàn)消息的同步與異步發(fā)送,并提供完整示例代碼,感興趣的朋友一起看看吧2025-04-04

