029-63618096

首頁 > 最新動態

Java 12/JDK 12正式發布

時間:2019年03月20日 10:51:06 來源:YoPlayGamesIT 作者:admin

自 2 月 7 日開始,Java/JDK 12 就進入了 RC 階段。按照發布周期,美國當地時間 3 月 19 日,也就是今天 Java 12 正式發布了!


△ JDK 12 GA 發布

  Java 12 帶來了一係列新特性:

189Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)    低暫停時間的 GC
230Microbenchmark Suite    微基準測試套件
325Switch Expressions (Preview)    Switch 表達式
334JVM Constants API    JVM 常量 API
340One AArch64 Port, Not Two    隻保留一個 AArch64 實現
341Default CDS Archives    默認類數據共享歸檔文件
344Abortable Mixed Collections for G1    可中止的 G1 Mixed GC
346Promptly 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),而對於可鏈接常量,定義了一係列符號引用類型(ClassDesc、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 現在采取“半年發布一次版本”的模式。

  可訪問 https://openjdk.java.net/projects/jdk/13/ 查看 JDK 13 的相關信息。

  討論

  留意到不少開發者對 Raw String Literals 特性情有獨鍾,該特性類似於 JavaScript ES6 語法中的模板字符串,使用它基本可以告別醜陋的字符串拚接。特性詳見 https://openjdk.java.net/jeps/326

  該特性原計劃於 JDK 12 發布,可惜最後還是被取消了,詳見:
https://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

  可能是因為業界呼聲太高,最近委員會又把這個特性拿出來重新討論了:
https://mail.openjdk.java.net/pipermail/amber-spec-experts/2019-January/000931.html

  你最想要的 JDK 特性是什麽?在留言區和大家分享吧!~

上一篇:2019年1月已到,Java 8要收費了嗎?

下一篇:C++ 17 標準正式發布:終於能更簡單地編寫和維護代碼了!