AAAIT学院JDK15新特性JAVA15版本
伴隨著2020的寒冬和新冠病毒的肆虐,JAVA迎來了久未已久的JAVA 14。自從2017年JAVA 9發(fā)布之后,JAVA的發(fā)布版本跟上了敏捷開發(fā)的步伐,小步快跑,Java平臺發(fā)布節(jié)奏已從每3年以上的主要版本轉(zhuǎn)變?yōu)槊?個月發(fā)布一次功能。現(xiàn)在,每年的3月和9月都會發(fā)布新的版本功能。
學習QQ:83193980 ? 學習視頻 ? ? https://edu.csdn.net/course/detail/31331
三月已過,九月還遠嗎?
在JAVA 14中,推出了swith的最終版本,并且支持了NVM。
今天本文將會展望一下JAVA 15中會帶給我們的新特性。
總體來說有5個JEP將會提交到JAVA 15。
什么?你問我JEP是什么?
JEP的全稱就是JDK Enhancement Proposals,簡單點講就像是一個個對JAVA進行改進提案,這些提案會在合適的時間合適的地點被加入JDK的特定版本。
下面看下5大提案都有些什么內(nèi)容:
JEP 371: Hidden Classes
通常我們在使用大型的框架或者lambda表達式的時候,會動態(tài)生成很多類。但是不幸的是標準的定義類的API:ClassLoader::defineClass 和 Lookup::defineClass不能夠區(qū)分出這些類是動態(tài)生成(運行時生成)的還是靜態(tài)
生成(編譯生成)的。
一般來說動態(tài)生成的類生命周期更短,并且其可見性要更低。但是現(xiàn)有的JDK并沒有這個功能。
所有有了Hidden Classes的提案,通過Hidden Classes,不管是JDK還是JDK外部的框架,在生成動態(tài)類的時候都可以定義為Hidden Classes,這樣可以更加有效的控制這些動態(tài)生成類的生命周期和可見性。
JEP 372: 刪除 Nashorn JavaScript Engine
實際上jdk.scripting.nashorn和jdk.scripting.nashorn.shell這兩個在JDK11的時候已經(jīng)被標記為deprecated。在JDK15中只是把他們刪除而已。
JEP 377: 新的垃圾回收器ZGC正式上線了
Z Garbage Collector(ZGC)是在JAVA 11中引入的垃圾回收器,但一直都是實驗版本,在JDK 15中,終于要上線了。
ZGC是一個重新設計的并發(fā)的垃圾回收器,可以極大的提升GC的性能。
JEP 378: Text Blocks 標準化
Text Blocks第一次是在JDK 13中以預覽功能出現(xiàn)的JEP 355。然后在JDK 14中又出現(xiàn)了第二個版本JEP 368。終于在JDK 15中可以有最終版本了。
文本塊是一種多行字符串文字,它避免了大多數(shù)轉(zhuǎn)義序列的需要,以一種可預測的方式自動設置字符串的格式。
HTML example
傳統(tǒng)方式:
String html = "<html>\n" +" <body>\n" +" <p>Hello, world</p>\n" +" </body>\n" +"</html>\n";文本塊方式:
String html = """<html><body><p>Hello, world</p></body></html>""";SQL example
傳統(tǒng)方式:
String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +"WHERE `CITY` = 'INDIANAPOLIS'\n" +"ORDER BY `EMP_ID`, `LAST_NAME`;\n";文本塊方式:
String query = """SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`WHERE `CITY` = 'INDIANAPOLIS'ORDER BY `EMP_ID`, `LAST_NAME`;""";JEP 379: 新的垃圾回收器Shenandoah上線
Shenandoah和ZGC一樣,是以實驗特性在JAVA 12中引入的JEP 189。現(xiàn)在終于要在JAVA 15中轉(zhuǎn)正了。
JEP 375:實例模式匹配(第二次預覽)
instanceof 自動匹配模式(預覽)
舊寫法:
// 先判斷類型 if (obj instanceof String) {// 然后轉(zhuǎn)換String s = (String) obj;// 然后才能使用 }新寫法:
if (obj instanceof String s) {// 如果類型匹配 直接使用 } else {// 如果類型不匹配則不能直接使用 }這是第二次預覽該功能,我們已經(jīng)在 Java 14 中首次預覽過該特性。
9、Records Class(預覽)
Records Class 也是第二次出現(xiàn)的預覽功能,它在 JDK 14 中也出現(xiàn)過一次了,使用 Record 可以更方便的創(chuàng)建一個常量類,使用的前后代碼對比如下。
舊寫法:
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) { }安裝包下載
主要分為OpenJDK版本和Oracle版本,下載地址如下:
-
OpenJDK版本:https://jdk.java.net/15/
-
Oracle版本:http://www.oracle.com/technetwork/java/javase/downloads/index.html
上述版本,如果是個人學習用途,則差異不大。但如果是用于商業(yè)用途,則需要仔細看好相關的授權(quán)。Oracle JDK根據(jù)二進制代碼許可協(xié)議獲得許可,而OpenJDK根據(jù)GPL v2許可獲得許可。
安裝、驗證
本例子以OpenJDK版本為例。解壓安裝包openjdk-15_windows-x64_bin.zip到任意位置。
設置系統(tǒng)環(huán)境變量“JAVA_HOME”,如下圖所示。
在用戶變量“Path”中,增加“%JAVA_HOME%\bin”。
安裝完成后,執(zhí)行下面命令進行驗證:
?>java?-version
openjdk?version?"15"?2020-09-15
OpenJDK?Runtime?Environment?(build?15+36-1562)
OpenJDK?64-Bit?Server?VM?(build?15+36-1562,?mixed?mode,?sharing)
更多有關Java的基本知識,可以參閱《Java核心編程》這本書,描述的非常詳細。
移除了 Nashorn JavaScript 腳本引擎
移除了 Nashorn JavaScript 腳本引擎、APIs,以及 jjs 工具。這些早在 JDK 11 中就已經(jīng)被標記為 deprecated 了,JDK 15 被移除就很正常了。
Nashorn 是 JDK 1.8 引入的一個 JavaScript 腳本引擎,用來取代 Rhino 腳本引擎。Nashorn 是 ECMAScript-262 5.1 的完整實現(xiàn),增強了 Java 和 JavaScript 的兼容性,并且大大提升了性能。
那么為什么要移除?
官方的解釋是主要的:隨著 ECMAScript 腳本語言的結(jié)構(gòu)、API 的改編速度越來越快,維護 Nashorn 太有挑戰(zhàn)性了,所以……。
5. 重新實現(xiàn) DatagramSocket API
重新實現(xiàn)舊版 DatagramSocket API,更簡單、更現(xiàn)代的實現(xiàn)來代替java.net.DatagramSocket和java.net.MulticastSocketAPI 的基礎實現(xiàn),提高了 JDK 的可維護性和穩(wěn)定性。
新的底層實現(xiàn)將很容易使用虛擬線程,目前正在 Loom 項目中進行探索。這也是 JEP 353 的后續(xù)更新版本,JEP 353 已經(jīng)重新實現(xiàn)了 Socket API。
6. 準備禁用和廢除偏向鎖
在 JDK 15 中,默認情況下禁用偏向鎖(Biased Locking),并棄用所有相關的命令行選項。
后面再確定是否需要繼續(xù)支持偏向鎖,因為維護這種鎖同步優(yōu)化的成本太高了。
總結(jié)
以上是生活随笔為你收集整理的AAAIT学院JDK15新特性JAVA15版本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何打开.mmap查看的问题
- 下一篇: JDK15新特性密封类可以被继承了!