Java 15 正式釋出, 14 個新特性,重新整理你的認知!!
阿新 • • 發佈:2020-09-17
JDK 15 2020/09/15 如期而至!
這個時間牛逼啊,和蘋果釋出會同天?
![](https://img2020.cnblogs.com/other/1218593/202009/1218593-20200917085028303-927709450.png)
OracleJDK 15 釋出地址:
> https://www.oracle.com/java/technologies/javase/15all-relnotes.html
OpenJDK 15 釋出地址:
> https://openjdk.java.net/projects/jdk/15/
OracleJDK 和 OpenJDK 兩者的區別這裡不撰述了,不清楚的請點選[這裡](https://mp.weixin.qq.com/s/FvGwskeFzSyB1n0aPVggAQ)進行檢視。
現在的 JDK 真變成了“版本帝”,無力吐槽啊,版本發到 15,大部分人卻都還在用著 JDK 7/8,甚至 6。不過沒關係,多瞭解一下,多掌握一點新東西,對你來說沒有壞處。
## 新特性
JDK 15 新特性一覽表:
ID | JEP | Feature
---|---|---
1 | 339 | Edwards-Curve Digital Signature Algorithm (EdDSA)
2 | 360 | Sealed Classes (Preview)
3 | 371 | Hidden Classes
4 | 372 | Remove the Nashorn JavaScript Engine
5 | 373 | Reimplement the Legacy DatagramSocket API
6 | 374 | Disable and Deprecate Biased Locking
7 | 375 | Pattern Matching for instanceof (Second Preview)
8 | 377 | ZGC: A Scalable Low-Latency Garbage Collector
9 | 378 | Text Blocks
10 | 379 | Shenandoah: A Low-Pause-Time Garbage Collector
11 | 381 | Remove the Solaris and SPARC Ports
12 | 383 | Foreign-Memory Access API (Second Incubator)
13 | 384 | Records (Second Preview)
14 | 385 | Deprecate RMI Activation for Removal
JDK 15 一次釋出了 14 個新特性,下面棧長帶大家來解讀下這些新特性!
#### 339:Edwards-Curve Digital Signature Algorithm (EdDSA)
`Edwards-Curve` 資料簽名演算法(EdDSA),一種根據 `RFC 8032` 規範所描述的 `Edwards-Curve` 數字簽名演算法(EdDSA)實現加密簽名,實現了一種 `RFC 8032` 標準化方案,但它不能代替 ECDSA。
> EdDSA 是一種現代的橢圓曲線簽名方案,與 JDK 中現有的簽名方案相比,它有很多優勢。
#### 360:Sealed Classes (Preview)
封閉類(預覽特性),可以是封閉類和或者封閉介面,用來增強 Java 程式語言,防止其他類或介面擴充套件或實現它們。
這個牛逼啊,有了這個特性,意味著以後不是你想繼承就繼承,想實現就實現了,你得經過允許才行。
來看這個示例:
```
public abstract sealed class Student
permits ZhangSan, LiSi, ZhaoLiu {
...
}
```
類 Student 被 `sealed` 修飾,說明它是一個封閉類,並且只允許指定的 3 個子類繼承。
#### 371:Hidden Classes
隱藏類,這一看也是個很有意思的特性。
隱藏類是為框架(frameworks)所設計的,隱藏類不能直接被其他類的位元組碼使用,只能在執行時生成類並通過反射間接使用它們。
#### 372:Remove the Nashorn JavaScript Engine
移除了 `Nashorn` JavaScript 指令碼引擎、APIs,以及 `jjs` 工具。這些早在 JDK 11 中就已經被標記為 `deprecated` 了,JDK 15 被移除就很正常了。
> Nashorn 是 JDK 1.8 引入的一個 JavaScript 指令碼引擎,用來取代 Rhino 指令碼引擎。Nashorn 是 `ECMAScript-262 5.1` 的完整實現,增強了 Java 和 JavaScript 的相容性,並且大大提升了效能。
**為什麼要移除?**
官方的描述是,隨著 `ECMAScript` 指令碼語言的結構、API 的改編速度越來越快,維護 `Nashorn` 太有挑戰性了,所以……。
#### 373:Reimplement the Legacy DatagramSocket API
重新實現了老的 `DatagramSocket` API 介面,更改了 `java.net.DatagramSocket` 和 `java.net.MulticastSocket` 為更加簡單、現代化的底層實現,更易於維護和除錯。
新的底層實現將很容易使用虛擬執行緒,目前正在 `Loom` 專案中進行探索。這也是 `JEP 353` 的後續更新版本,`JEP 353` 已經重新實現了 Socket API。
#### 374:Disable and Deprecate Biased Locking
準備禁用和廢除偏向鎖,在 JDK 15 中,預設情況下禁用偏向鎖,並棄用所有相關的命令列選項。
後面再確定是否需要繼續支援偏向鎖,國為維護這種鎖同步優化的成本太高了。
#### 375:Pattern Matching for instanceof (Second Preview)
模式匹配(第二次預覽),第一次預覽是 JDK 14 中提出來的,點選[這裡](https://mp.weixin.qq.com/s/Qfni7MQOicfhCOtCMEpaog)檢視棧長之前寫的詳細教程。
**Java 14 之前:**
```
if (object instanceof Kid) {
Kid kid = (Kid) object;
// ...
} else if (object instanceof Kiddle) {
Kid kid = (Kid) object;
// ...
}
```
**Java 14+:**
```
if (object instanceof Kid kid) {
// ...
} else if (object instanceof Kiddle kiddle) {
// ...
}
```
Java 15 並沒有對此特性進行調整,繼續預覽特性,只是為了收集更多的使用者反饋,可能還不成熟吧。
#### 377:ZGC: A Scalable Low-Latency Garbage Collector
ZGC:一個可伸縮、低延遲的垃圾回收器。
`ZGC` 最早是在 JDK 11 中整合進來的,JDK 15 只是將 `ZGC` 垃圾收集器從預覽特性變更為正式特性而已,沒錯,轉正了。
這個 `JEP` 不會更改預設的 GC,預設仍然是 `G1`。
#### 378:Text Blocks
文字塊,是一個多行字串,它可以避免使用大多數轉義符號,自動以可預測的方式格式化字串,並讓開發人員在需要時可以控制格式。
文字塊最早準備在 JDK 12 新增的,但最終撤消了,然後在 JDK 13 中作為預覽特性進行了新增,然後又在 JDK 14 中再次預覽,在 JDK 15 中,文字塊終於轉正,暫不再做進一步的更改。
來看下這個示例你就懂了:
**Java 13 之前:**
```
String html = "\n" +
" \n" +
"
Hi, Java技術棧
\n" + "歡迎關注,分享更多幹貨
\n" + " \n" + "\n"; ``` **Java 13+:** ``` String html = """Hi, Java技術棧
歡迎關注,分享更多幹貨
"""; ``` 去掉那些無用的換行和拼接,是不是太爽了。。這個詳細教程計劃再出一篇,關注公眾號Java技術棧第一時間推送。 #### 379:Shenandoah: A Low-Pause-Time Garbage Collector Shenandoah:一個低停頓時間的垃圾回收器。 `Shenandoah` 最早是在 JDK 12 中整合進來的,JDK 15 只是將 `Shenandoah` 垃圾收集器從預覽特性變更為正式特性而已,沒錯,又是轉正了。 #### 381:Remove the Solaris and SPARC Ports 移除了 `Solaris` 和 `SPARC` 埠。 移除了 `Solaris/SPARC`、`Solaris/x64` 和 `Linux/SPARC` 埠的原始碼及構建支援。這些埠在 JDK 14 中就已經被標記為 `deprecated` 了,JDK 15 被移除也不奇怪。 #### 383:Foreign-Memory Access API (Second Incubator) 外存訪問 API(二次孵化),可以允許 Java 應用程式安全有效地訪問 Java 堆之外的外部記憶體。 這個最早在 JDK 14 中成為孵化特性,JDK 15 繼續二次孵化並對其 API 有了一些更新。 #### 384:Records (Second Preview) Records 最早在 JDK 14 中成為預覽特性,JDK 15 繼續二次預覽。 Records 在某些場合可以幹掉 `Lombok` 的存在,能自動生成了類構造器、toString()、hashCode()、equals(),以及類似 getter 的變數訪問方法。 使用方式: ``` public record Student(String name, int id, int age) {} ``` 實際生成: ![](https://img2020.cnblogs.com/other/1218593/202009/1218593-20200917085028556-1834355223.png) 看完是不是有點 Lombok 的感覺?具體可以點選[這裡](https://mp.weixin.qq.com/s/d5dX1ldc-Wse2PT7ODR9xA)檢視棧長之前寫的詳細教程。 #### 385:Deprecate RMI Activation for Removal 廢除 RMI 啟用,以便在將來進行刪除。 需要說明的是,RMI 啟用是 RMI 中一個過時的元件,自 Java 8 以來一直是可選的。 ## 總結 本文主要介紹了 JDK/Java 15 的 14 個新特性,後面棧長有時間也會繼續出一些 JDK 15 詳細教程,關注公眾號Java技術棧第一時間推送哦。如果你想看歷史 Java 8 - 14 新特性教程,也可以在公眾號選單中進行閱讀。 最後,來看下 Oracle Java 支援路線圖: ![](https://img2020.cnblogs.com/other/1218593/202009/1218593-20200917085028750-1514345051.png) JDK 15 並不是一個長期支援的版本,只支援 6 個月到 2021 年 3 月,上一個長期支援版本還是 JDK 11,所以千萬不要把非長期支援版本用在生產。 JDK 15 下載地址: > https://www.oracle.com/java/technologies/javase-downloads.html 有興趣的可以下載嚐鮮了!! **寫了大半天,點個在看、轉發支援下哦,分享給你的更多朋友們~** 關注Java技術棧,持續分享最新、最主流的Java技術~ **近期熱文推薦:** 1.[終於靠開源專案弄到 IntelliJ IDEA 啟用碼了,真香!](http://www.javastack.cn/article/2020/intellij-idea-by-open-source-project/) 2.[我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看。。](http://www.javastack.cn/article/2020/java-8-optional-map-do-you-know/) 3.[吊打 Tomcat ,Undertow 效能很炸!!](http://www.javastack.cn/article/2020/undertow-introduce-with-spring-boot/) 4.[國人開源了一款超好用的 Redis 客戶端,真香!!](http://www.javastack.cn/article/2020/another-redis-desktop-manager/) 5.[《Java開發手冊(嵩山版)》最新發布,速速下載!](http://www.javastack.cn/article/2020/alibaba-release-java-develop-rules-songshan/) 覺得不錯,別忘了隨手點贊+轉發哦!