Java 12都正式發佈了 你還在用老掉牙的JDK1.6

Java 12都正式發佈了 你還在用老掉牙的JDK1.6

JDK 12 已於2018年12月進入 Rampdown Phase One 階段,這意味著該版本所有新的功能特性被凍結,不會再加入更多的 JEP 。該階段將持續一個月,主要修復 P1-P3 級錯誤。

Java 12都正式發佈了 你還在用老掉牙的JDK1.6

自 2 月 7 日開始,Java/JDK 12 就進入了 RC 階段。

按照發布週期,美國當地時間 3 月 19 日, Java 12 正式發佈了!Java 12 帶來了一系列新特性,下邊分別來看看:

Java 12都正式發佈了 你還在用老掉牙的JDK1.6

作為“功能性版本”,JDK 12 總共包含 8 個新的 JEP ,分別為:

  • 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) :新增一個名為 Shenandoah 的垃圾回收器,它通過在 Java 線程運行的同時進行疏散 (evacuation) 工作來減少停頓時間。
  • 230: Microbenchmark Suite:新增一套微基準測試,使開發者能夠基於現有的 Java Microbenchmark Harness(JMH)輕鬆測試 JDK 的性能,並創建新的基準測試。
  • 325: Switch Expressions (Preview) :對 switch 語句進行擴展,使其可以用作語句或表達式,簡化日常代碼。
  • 334: JVM Constants API :引入一個 API 來對關鍵類文件 (key class-file) 和運行時工件的名義描述(nominal descriptions)進行建模,特別是那些可從常量池加載的常量。
  • 340: One AArch64 Port, Not Two :刪除與 arm64 端口相關的所有源碼,保留 32 位 ARM 移植和 64 位 aarch64 移植。
  • 341: Default CDS Archives :默認生成類數據共享(CDS)存檔。
  • 344: Abortable Mixed Collections for G1 :當 G1 垃圾回收器的回收超過暫停目標,則能中止垃圾回收過程。
  • 346: Promptly Return Unused Committed Memory from G1 :改進 G1 垃圾回收器,以便在空閒時自動將 Java 堆內存返回給操作系統。
Java 12都正式發佈了 你還在用老掉牙的JDK1.6

△ JDK 12 GA 發佈

  • 189Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 低暫停時間的 GC230Microbenchmark Suite 微基準測試套件325Switch Expressions (Preview) Switch 表達式334JVM Constants API JVM 常量 API340One AArch64 Port, Not Two 只保留一個 AArch64 實現341Default CDS Archives 默認類數據共享歸檔文件
    344Abortable Mixed Collections for G1 可中止的 G1 Mixed GC346Promptly 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)做好準備。

Java 12都正式發佈了 你還在用老掉牙的JDK1.6

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,以使返回的內存量最大化。

你目前正在使用哪個 Java 版本?2019年是否有遷移計劃?歡迎評論~

Java 12都正式發佈了 你還在用老掉牙的JDK1.6


分享到:


相關文章: