JDK15正式发布,新增功能预览!
作者 | 王磊
來源 | Java中文社群(ID:javacn666)
轉載請聯系授權(微信ID:GG_Stone)
JDK 15 在 2020 年 9 月 15 號正式發布了,這次發布的主要功能有:
JEP 339:EdDSA 數字簽名算法
JEP 360:密封類(預覽)
JEP 371:隱藏類
JEP 372:刪除 Nashorn JavaScript 引擎
JEP 373:重新實現 Legacy DatagramSocket API
JEP 374:重新實現 DatagramSocket API
JEP 375:實例模式匹配(第二次預覽)
JEP 377:ZGC:一個可擴展的低延遲垃圾收集器
JEP 378:文本塊
JEP 379:低暫停時間垃圾收集器
JEP 381:移除 Solaris 和 SPARC 端口
JEP 383:外部存儲器訪問 API(第二個內置程序)
JEP 384:Records(第二次預覽)
JEP 385:不推薦的 RMI 激活去除
JEP:JDK Enhancement Proposals,JDK 增強建議,也就是 JDK 的特性新增和改進提案。
這些年發布的版本對應的 JEPs 數量如下圖所示:
發布版本說明
根據發布的規劃,這次發布的 JDK 15 將是一個短期的過度版,只會被 Oracle 支持(維護)6 個月,直到明年 3 月的 JDK 16 發布此版本將停止維護。而 Oracle 下一個長期支持版(LTS 版)會在明年的 9 月份候發布(Java 17),LTS 版每 3 年發布一個,上一次長期支持版是 18 年 9 月發布的 JDK 11。
JDK 15 新功能說明
JDK 15 為用戶提供了十四項主要的增強/更改,包括一個孵化器模塊,三個預覽功能,兩個不推薦使用的功能以及兩個刪除功能。
1、EdDSA 數字簽名算法
新加入 Edwards-Curve 數字簽名算法(EdDSA)實現加密簽名。在許多其它加密庫(如 OpenSSL 和 BoringSSL)中得到支持。與 JDK 中的現有簽名方案相比,EdDSA 具有更高的安全性和性能。這是一個新的功能。
2、隱藏類
此功能可幫助需要在運行時生成類的框架??蚣苌深愋枰獎討B擴展其行為,但是又希望限制對這些類的訪問。隱藏類很有用,因為它們只能通過反射訪問,而不能從普通字節碼訪問。此外,隱藏類可以獨立于其他類加載,這可以減少框架的內存占用。這是一個新的功能。
3、重新實現 DatagramSocket API
重新實現舊版 DatagramSocket API,更簡單、更現代的實現來代替java.net.DatagramSocket和java.net.MulticastSocketAPI 的基礎實現,提高了 JDK 的可維護性和穩定性。
4、ZGC 功能轉正
ZGC 已由JEP 333集成到JDK 11 中,其目標是通過減少 GC 停頓時間來提高性能。借助 JEP 377,ZGC 從預覽功能轉變為生產功能。
5、文本塊功能轉正
文本塊由JEP 355在 2019 年提出,文本塊是一種多行字符串文字,它避免了大多數轉義序列的需要,以一種可預測的方式自動設置字符串的格式,并在需要時使開發人員可以控制格式。借助 JEP 378,文本塊已成為 Java 語言的永久功能。
6、Shenandoah 垃圾回收算法轉正
Shenandoah 垃圾回收從實驗特性變為產品特性。這是一個從 JDK 12 引入的回收算法,該算法通過與正在運行的 Java 線程同時進行疏散工作來減少 GC 暫停時間。Shenandoah 的暫停時間與堆大小無關,無論堆棧是 200 MB 還是 200 GB,都具有相同的一致暫停時間。
7、密封類(預覽)
通過密封的類和接口來增強 Java 編程語言,用于限制超類的使用,密封的類和接口限制其它可能繼承或實現它們的其它類或接口。
8、instanceof 自動匹配模式(預覽)
舊寫法:
//?先判斷類型 if?(obj?instanceof?String)?{//?然后轉換String?s?=?(String)?obj;//?然后才能使用 }新寫法:
if?(obj?instanceof?String?s)?{//?如果類型匹配?直接使用 }?else?{//?如果類型不匹配則不能直接使用 }這是第二次預覽該功能,我們已經在 Java 14 中首次預覽過該特性。
9、Records Class(預覽)
Records Class 也是第二次出現的預覽功能,它在 JDK 14 中也出現過一次了,使用 Record 可以更方便的創建一個常量類,使用的前后代碼對比如下。
舊寫法:
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 之后,就可以用一行代碼編寫出一個常量類,并且這個常量類還包含了構造方法、toString()、equals() 和 hashCode() 等方法。
10、外部存儲器訪問 API(預覽)
目的是引入一個 API,以允許 Java 程序安全有效地訪問 Java 堆之外的外部內存。這同樣是 Java 14 的一個預覽特性。
11、其它功能
其它功能里面還有一些棄用和不建議使用的功能,比如移除了 Nashorn JavaScript 引擎,同時也移除了刪除 Solaris 和 SPARC 端口,并標記了一些棄用功能。
參考 & 鳴謝
碼農小胖哥:https://mp.weixin.qq.com/s/rhfSLW0wfe73xgbRVvX46Q
官方日志:https://openjdk.java.net/projects/jdk/15/
往期推薦漫畫:什么是紅黑樹?(整合版)
2020-09-15
圖解|查找數組中最大值的5種方法!
2020-09-16
萬字詳解|手撕 9大排序算法!
2020-09-11
字符串操作的12個小技巧!
2020-09-10
關注下方二維碼,收獲更多干貨!
總結
以上是生活随笔為你收集整理的JDK15正式发布,新增功能预览!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 漫画:Java如何实现热更新?
- 下一篇: Maven必知的7个问题,你会吗?