Java 12 / JDK 12 正式發布
自2月7日開始,Java/JDK 12就進入了RC階段。按照發布週期,美國當地時間3月19日,也就是今天Java 12正式發布了!Java 12帶來了一系列新特性,下邊分別來看看:
△ JDK 12 GA 發布
189 | Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 低暫停時間的GC |
230 | Microbenchmark Suite 微基準測試套件 |
325 | Switch Expressions (Preview) Switch表達式 |
334 | JVM Constants API JVM常量API |
340 | One AArch64 Port, Not Two 只保留一個AArch64實現 |
341 | Default CDS Archives 默認類數據共享歸檔文件 |
344 | Abortable Mixed Collections for G1 可中止的G1 Mixed GC |
346 | Promptly Return Unused Committed Memory from G1 G1及時返回未使用的已分配內存 |
Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
Shenandoah:低暫停時間的GC(實驗性功能)
新增了一個名為Shenandoah 的 GC 算法,通過與正在運行的Java 線程同時進行evacuation 工作來減少GC 暫停時間。使用Shenandoah 的暫停時間與堆大小無關,這意味著無論堆是200 MB 還是200 GB,都將具有相同的暫停時間。
Microbenchmark Suite
微基準測試套件
JDK 源碼中新增了一套微基準測試套件,使開發人員可以輕鬆運行現有的微基準測試並創建新的基準測試。
Switch Expressions (Preview)
Switch 表達式(預覽功能)
擴展了switch 語句,使其不僅可以作為語句(statement),還可以作為表達式(expression),並且兩種寫法都可以使用傳統的switch 語法,或者使用簡化的“case L ->”模式匹配語法作用於不同範圍並控制執行流。這些更改將簡化日常編碼工作,並為switch 中的模式匹配(JEP 305)做好準備。
JVM Constants API
JVM 常量API
引入API來模擬關鍵類文件和運行時工件的描述,特別是可從常量池加載的常量。在新的java.lang.invoke.constant包中定義了一系列基於值的符號引用(JVMS 5.1)類型,它們能夠描述每種可加載常量。符號引用以純nominal形式描述可加載常量,與類加載或可訪問性上下文區分開。有些類可以作為自己的符號引用(例如String),而對於可鏈接常量,定義了一系列符號引用類型(Cla SSD esc、MethodTypeDesc、MethodHandleDesc和DynamicConstantDesc),它們包含描述這些常量的nominal信息。
One AArch64 Port, Not Two
只保留一個AArch64 實現
刪除了與arm64 相關的所有源,同時保留32 位ARM 實現和64 位aarch64。
JDK 中存在兩套 64 位ARM 實現,主要存在於src/hotspot/cpu/arm 和open/src/hotspot/cpu/aarch64 目錄。兩者都實現了 aarch64,現在將只保留後者,刪除由 Oracle 提供的arm64。這將使貢獻者將他們的精力集中在單個64 位ARM 實現上,並消除維護兩套實現所需的重複工作。
Default CDS Archives
默認類數據共享歸檔文件
針對64 位平台,使用默認類列表增強JDK 構建過程以生成類數據共享(class data-sharing,CDS)檔。
Abortable Mixed Collections for G1
可中止的G1 Mixed GC
如果G1 Mixed GC 存在超出暫停目標的可能性,則使其可中止。
Promptly Return Unused Committed Memory from G1
G1 及時返回未使用的已分配內存
增強G1 GC,在空閒時自動將Java 堆內存返回給操作系統。為了實現向操作系統返回最大內存量的目標,G1 將在應用程序不活動期間定期執行或觸發並發週期以確定整體Java 堆使用情況。這將導致它自動將Java 堆的未使用部分返回給操作系統。而在用戶控制下,可以可選地執行完整的GC,以使返回的內存量最大化。
上述每一個新特性都有詳細的說明文檔,可以點擊相應鏈接查看。
觀望JDK 13
根據JDK 13 的迭代計劃,預計將於2019 年9 月發布—— Java 現在採取“半年發布一次版本”的模式。
可訪問http://openjdk.java.net/projects/jdk/13/ 查看JDK 13 的相關信息。
討論
留意到不少開發者對 Raw String Literals 特性情有獨鍾,該特性類似於JavaScript ES6 語法中的模板字符串,使用它基本可以告別醜陋的字符串拼接。
特性詳見 http://openjdk.java.net/jeps/326
該特性原計劃於JDK 12 發布,可惜最後還是被取消了,詳見:
可能是因為業界呼聲太高,最近委員會又把這個特性拿出來重新討論了: