JDK 12帶來了許多新功能,包括Switch Expressions的預(yù)覽和Garbage-First(G1)收集器的可丟棄混合集合。
JDK 12的增強(qiáng)功能
低暫停時間垃圾收集器(JEP 189)
代號為“Shenandoah”的實(shí)驗(yàn)性功能增加了一種新算法,旨在通過與正在運(yùn)行的Java線程同時處理疏散工作來減少GC暫停時間。
Microbenchmark套房(JEP 230)
此更新為JDK源代碼添加了一套基本的微基準(zhǔn)測試,使開發(fā)人員可以輕松運(yùn)行現(xiàn)有的微基準(zhǔn)測試并創(chuàng)建新的基準(zhǔn)測試。
切換表達(dá)式(JEP 325)
作為此版本中的預(yù)覽提供,此功能擴(kuò)展了switch語句,因此可以將其用作語句或表達(dá)式。它允許兩種形式使用“傳統(tǒng)”或“簡化”范圍和控制流行為。該公司表示,“這些改變將簡化日常編碼,并為切換中使用模式匹配(JEP 305)做好準(zhǔn)備!
JVM常量API(JEP 334)
此API旨在為關(guān)鍵類文件和運(yùn)行時工件的名義描述建模,特別是可從常量池加載的常量,該常量池存儲類中字節(jié)碼指令的操作數(shù)。
一個AArch64端口,而不是兩個(JEP 340)
此功能刪除了與arm64端口相關(guān)的所有源,同時保留了32位ARM端口和64位aarch64端口。此功能允許所有貢獻(xiàn)者將他們的精力集中在單個64位ARM實(shí)現(xiàn)上,并消除了維護(hù)兩個端口所需的重復(fù)工作。
默認(rèn)CDS檔案(JEP 341)
此功能旨在增強(qiáng)JDK構(gòu)建過程,以使用64位平臺上的默認(rèn)類列表生成類數(shù)據(jù)共享(CDS)歸檔。
G1的可流動混合收集(JEP 344)
此增強(qiáng)功能使G1混合集合可能會超出暫停目標(biāo)。
從G1快速返回未使用的承諾內(nèi)存(JEP 346)
此功能旨在允許G1垃圾收集器在空閑時自動將Java堆內(nèi)存返回到操作系統(tǒng)。
JDK 12的特點(diǎn)
189 Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 低暫停時間的 GC
230 Microbenchmark Suite 微基準(zhǔn)測試套件
325 Switch Expressions (Preview) Switch 表達(dá)式
334 JVM Constants API JVM 常量 API
340 One AArch64 Port, Not Two 只保留一個 AArch64 實(shí)現(xiàn)
341 Default CDS Archives 默認(rèn)類數(shù)據(jù)共享歸檔文件
344 Abortable Mixed Collections for G1 可中止的 G1 Mixed GC
346 Promptly Return Unused Committed Memory from G1 G1 及時返回未使用的已分配內(nèi)存
JDK 12的特點(diǎn)介紹
Shenandoah:低暫停時間的 GC(實(shí)驗(yàn)性功能)
新增了一個名為 Shenandoah 的 GC 算法,通過與正在運(yùn)行的 Java 線程同時進(jìn)行 evacuation 工作來減少 GC 暫停時間。使用 Shenandoah 的暫停時間與堆大小無關(guān),這意味著無論堆是 200 MB 還是 200 GB,都將具有相同的暫停時間。
Microbenchmark Suite
微基準(zhǔn)測試套件
JDK 源碼中新增了一套微基準(zhǔn)測試套件,使開發(fā)人員可以輕松運(yùn)行現(xiàn)有的微基準(zhǔn)測試并創(chuàng)建新的基準(zhǔn)測試。
Switch Expressions (Preview)
Switch 表達(dá)式(預(yù)覽功能)
擴(kuò)展了 switch 語句,使其不僅可以作為語句(statement),還可以作為表達(dá)式(expression),并且兩種寫法都可以使用傳統(tǒng)的 switch 語法,或者使用簡化的“case L ->”模式匹配語法作用于不同范圍并控制執(zhí)行流。這些更改將簡化日常編碼工作,并為 switch 中的模式匹配(JEP 305)做好準(zhǔn)備。
JVM Constants API
JVM 常量 API
引入 API 來模擬關(guān)鍵類文件和運(yùn)行時工件的描述,特別是可從常量池加載的常量。在新的 java.lang.invoke.constant 包中定義了一系列基于值的符號引用(JVMS 5.1)類型,它們能夠描述每種可加載常量。符號引用以純 nominal 形式描述可加載常量,與類加載或可訪問性上下文區(qū)分開。有些類可以作為自己的符號引用(例如 String),而對于可鏈接常量,定義了一系列符號引用類型(ClaSSDesc、MethodTypeDesc、MethodHandleDesc 和 DynamicConstantDesc),它們包含描述這些常量的 nominal 信息。
One AArch64 Port, Not Two
只保留一個 AArch64 實(shí)現(xiàn)
刪除了與 arm64 相關(guān)的所有源,同時保留 32 位 ARM 實(shí)現(xiàn)和 64 位 aarch64。
JDK 中存在兩套 64 位 ARM 實(shí)現(xiàn),主要存在于 src/hotspot/cpu/arm 和 open/src/hotspot/cpu/aarch64 目錄。兩者都實(shí)現(xiàn)了 aarch64,現(xiàn)在將只保留后者,刪除由 Oracle 提供的 arm64。這將使貢獻(xiàn)者將他們的精力集中在單個 64 位 ARM 實(shí)現(xiàn)上,并消除維護(hù)兩套實(shí)現(xiàn)所需的重復(fù)工作。
Default CDS Archives
默認(rèn)類數(shù)據(jù)共享歸檔文件
針對 64 位平臺,使用默認(rèn)類列表增強(qiáng) JDK 構(gòu)建過程以生成類數(shù)據(jù)共享(class data-sharing,CDS)檔。
Abortable Mixed Collections for G1
可中止的 G1 Mixed GC
如果 G1 Mixed GC 存在超出暫停目標(biāo)的可能性,則使其可中止。
Promptly Return Unused Committed Memory from G1
G1 及時返回未使用的已分配內(nèi)存
增強(qiáng) G1 GC,在空閑時自動將 Java 堆內(nèi)存返回給操作系統(tǒng)。為了實(shí)現(xiàn)向操作系統(tǒng)返回最大內(nèi)存量的目標(biāo),G1 將在應(yīng)用程序不活動期間定期執(zhí)行或觸發(fā)并發(fā)周期以確定整體 Java 堆使用情況。這將導(dǎo)致它自動將 Java 堆的未使用部分返回給操作系統(tǒng)。而在用戶控制下,可以可選地執(zhí)行完整的 GC,以使返回的內(nèi)存量最大化。
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版