JDK 12帶來了許多新功能,包括Switch Expressions的預覽和Garbage-First(G1)收集器的可丟棄混合集合。
JDK 12的增強功能
低暫停時間垃圾收集器(JEP 189)
代號為“Shenandoah”的實驗性功能增加了一種新算法,旨在通過與正在運行的Java線程同時處理疏散工作來減少GC暫停時間。
Microbenchmark套房(JEP 230)
此更新為JDK源代碼添加了一套基本的微基準測試,使開發人員可以輕松運行現有的微基準測試并創建新的基準測試。
切換表達式(JEP 325)
作為此版本中的預覽提供,此功能擴展了switch語句,因此可以將其用作語句或表達式。它允許兩種形式使用“傳統”或“簡化”范圍和控制流行為。該公司表示,“這些改變將簡化日常編碼,并為切換中使用模式匹配(JEP 305)做好準備!
JVM常量API(JEP 334)
此API旨在為關鍵類文件和運行時工件的名義描述建模,特別是可從常量池加載的常量,該常量池存儲類中字節碼指令的操作數。
一個AArch64端口,而不是兩個(JEP 340)
此功能刪除了與arm64端口相關的所有源,同時保留了32位ARM端口和64位aarch64端口。此功能允許所有貢獻者將他們的精力集中在單個64位ARM實現上,并消除了維護兩個端口所需的重復工作。
默認CDS檔案(JEP 341)
此功能旨在增強JDK構建過程,以使用64位平臺上的默認類列表生成類數據共享(CDS)歸檔。
G1的可流動混合收集(JEP 344)
此增強功能使G1混合集合可能會超出暫停目標。
從G1快速返回未使用的承諾內存(JEP 346)
此功能旨在允許G1垃圾收集器在空閑時自動將Java堆內存返回到操作系統。
JDK 12的特點
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 及時返回未使用的已分配內存
JDK 12的特點介紹
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,以使返回的內存量最大化。
- PC官方版
- 安卓官方手機版
- IOS官方手機版