歡迎光臨
每天分享高質量文章

Java 12 正式發佈

(給ImportNew加星標,提高Java技能)

 

轉自:開源中國

 

 

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

 

 

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

 

 

下邊分別來看看:

 

JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)

 

Shenandoah:低暫停時間的 GC(實驗性功能)

 

新增了一個名為 Shenandoah 的 GC 演算法,通過與正在運行的 Java 執行緒同時進行 evacuation 工作來減少 GC 暫停時間。使用 Shenandoah 的暫停時間與堆大小無關,這意味著無論堆是 200MB 還是 200GB,都將具有相同的暫停時間。

 

JEP 230: Microbenchmark Suite

 

微基準測試套件

 

JDK 原始碼中新增了一套微基準測試套件,開發人員可通過它輕鬆運行已有的微基準測試並創建新的基準測試。

 

JEP 325: Switch Expressions (Preview)

 

Switch 運算式(預覽功能)

 

對 switch 陳述句進行了擴展,使其不僅可以作為陳述句(statement),還可以作為運算式(expression),並且兩種寫法都可以使用傳統的 switch 語法,或者使用簡化的 “case L ->” 樣式匹配語法作用於不同範圍並控制執行流。這些更改將簡化日常編碼工作,併為 switch 中的樣式匹配(JEP 305)做好準備。

 

JEP 334: JVM Constants API

 

JVM 常量 API

 

引入 API 來對關鍵類檔案(key class-file)和運行時工件(run-time artifacts)的名義描述(nominal descriptions)進行建模,特別是可從常量池加載的常量。

 

在新的 java.lang.invoke.constant 包中定義了一系列基於值的符號取用(JVMS 5.1)型別,它們能夠描述每種可加載常量。

 

符號取用以純 nominal 形式描述可加載常量,與類加載或可訪問性背景關係區分開。有些類可以作為自己的符號取用(例如 String),而對於可鏈接常量,定義了一系列符號取用型別(ClassDesc、MethodTypeDesc、MethodHandleDesc 和 DynamicConstantDesc),它們包含描述這些常量的 nominal 信息。

 

JEP 340: One AArch64 Port, Not Two

 

只保留一個 AArch64 實現

 

在保留 32 位 ARM 實現和 64 位 aarch64 實現的同時,刪除與 arm64 實現相關的所有原始碼。

 

JDK 中存在兩套 64 位 ARM 實現,主要存在於src/hotspot/cpu/armopen/src/hotspot/cpu/aarch64 目錄。兩者都實現了 aarch64,現在將只保留後者,刪除由 Oracle 提供的 arm64。這將使貢獻者將他們的精力集中在單個 64 位 ARM 實現上,並消除維護兩套實現所需的重覆工作。

 

JEP 341: Default CDS Archives

 

預設類資料共享歸檔檔案

 

針對 64 位平臺,使用預設類串列增強 JDK 構建過程,以生成類資料共享(class data-sharing,CDS)歸檔。

 

JEP 344: Abortable Mixed Collections for G1

 

可中止的 G1 混合 GC

 

如果混合 GC 的 G1 存在超出暫停標的的可能性,則使其可中止。

 

JEP 346: Promptly Return Unused Committed Memory from G1

 

G1 及時傳回未使用的已分配記憶體

 

增強 G1 GC,以便在空閑時自動將 Java 堆記憶體傳回給操作系統。

 

為了實現向操作系統傳回最大記憶體量的標的,G1 將在應用程式不活動期間定期執行或觸發併發周期以確定整體 Java 堆使用情況。這將導致它自動將 Java 堆的未使用部分傳回給操作系統。而在用戶控制下,可以可選地執行完整的 GC,以使傳回的記憶體量最大化。

 

觀望 JDK 13

 

根據 JDK 13 的迭代計劃,預計其將於 2019 年 9 月發佈 —— Java 現在採取“半年發佈一次版本”的樣式。

 

對於 JDK 13 的新特性,Oracle Java 平臺組首席架構師 Mark Reinhold 做出了兩個預測:

  • 原生字串文字(Raw String Literals),它可以跨多行原始碼而不對轉義字符進行轉義。標的是簡化 Java 的開發,比如開發者可以可讀形式表示字符序列,而不會摻雜一些 Java 指示符,或者提供針對 Java 以外的語法的字串。在 JDK 13 中進行預期的測試運行後,該功能可以在隨後的 JDK 14 版本中跟進。
  • 可用於生產環境的 switch 運算式,JDK 13 中將帶來一個 beta 版本實現。switch 運算式擴展了 switch 陳述句,使其不僅可以作為陳述句(statement),還可以作為運算式(expression),並且兩種寫法都可以使用傳統的 switch 語法,或者使用簡化的“case L ->”樣式匹配語法作用於不同範圍並控制執行流。這些更改將簡化日常編碼工作,併為 switch 中的樣式匹配(JEP 305)做好準備。

 

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

 

討論

 

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

 

該特性原計劃於 JDK 12 發佈,可惜最後還是被取消了(不過可能會在 JDK 13 發佈),詳見:

 

http://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 特性是什麼?在留言區和大家分享吧!~

    赞(0)

    分享創造快樂