Java 12 / JDK 12 正式發(fā)布有哪些新特性?具體變化有Shenandoah:低暫停時間的 GC(實驗性功能)、Microbenchmark Suite、Switch expressions (Preview)、JVMConstants API、One AArch64 Port, Not Two、Default CDS Archives、Abortable Mixed Collections for G1、promptly Return Unused Committed Memory from G1。
自 2 月 7 日開始,Java/JDK 12 就進(jìn)入了 RC 階段。按照發(fā)布周期,美國當(dāng)?shù)貢r間 3 月 19 日,也就是今天 Java 12 正式發(fā)布了!
Java 12 帶來了一系列新特性:
189Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 低暫停時間的 GC
230Microbenchmark Suite 微基準(zhǔn)測試套件
325Switch expressions (Preview) Switch 表達(dá)式
334JVM Constants API JVM 常量 API
340One AArch64 Port, Not Two 只保留一個 AArch64 實現(xiàn)
341Default CDS Archives 默認(rèn)類數(shù)據(jù)共享歸檔文件
344Abortable Mixed Collections for G1 可中止的 G1 Mixed GC
346promptly Return Unused Committed Memory from G1 G1 及時返回未使用的已分配內(nèi)存
1、Shenandoah:低暫停時間的 GC(實驗性功能)
新增了一個名為 Shenandoah 的 GC 算法,通過與正在運(yùn)行的 Java線程同時進(jìn)行 evacuation 工作來減少 GC 暫停時間。使用 Shenandoah 的暫停時間與堆大小無關(guān),這意味著無論堆是 200 MB 還是 200 GB,都將具有相同的暫停時間。
2、Microbenchmark Suite
微基準(zhǔn)測試套件
JDK 源碼中新增了一套微基準(zhǔn)測試套件,使開發(fā)人員可以輕松運(yùn)行現(xiàn)有的微基準(zhǔn)測試并創(chuàng)建新的基準(zhǔn)測試。
3、Switch expressions (Preview)
Switch 表達(dá)式(預(yù)覽功能)
擴(kuò)展了 switch 語句,使其不僅可以作為語句(statement),還可以作為表達(dá)式(expression),并且兩種寫法都可以使用傳統(tǒng)的 switch 語法,或者使用簡化的“case L ->”模式匹配語法作用于不同范圍并控制執(zhí)行流。這些更改將簡化日常編碼工作,并為 switch 中的模式匹配(JEP 305)做好準(zhǔn)備。
4、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 信息。
5、One AArch64 Port, Not Two
只保留一個 AArch64 實現(xiàn)
刪除了與 arm64 相關(guān)的所有源,同時保留 32 位 ARM 實現(xiàn)和 64 位 aarch64。
JDK 中存在兩套 64 位 ARM 實現(xiàn),主要存在于 src/hotspot/cpu/arm 和 open/src/hotspot/cpu/aarch64 目錄。兩者都實現(xiàn)了 aarch64,現(xiàn)在將只保留后者,刪除由 Oracle 提供的 arm64。這將使貢獻(xiàn)者將他們的精力集中在單個 64 位 ARM 實現(xiàn)上,并消除維護(hù)兩套實現(xiàn)所需的重復(fù)工作。
6、Default CDS Archives
默認(rèn)類數(shù)據(jù)共享歸檔文件
針對 64 位平臺,使用默認(rèn)類列表增強(qiáng) JDK 構(gòu)建過程以生成類數(shù)據(jù)共享(class data-sharing,CDS)檔。
7、Abortable Mixed Collections for G1
可中止的 G1 Mixed GC
如果 G1 Mixed GC 存在超出暫停目標(biāo)的可能性,則使其可中止。
promptly Return Unused Committed Memory from G1
8、G1 及時返回未使用的已分配內(nèi)存
增強(qiáng) G1 GC,在空閑時自動將 Java 堆內(nèi)存返回給操作系統(tǒng)。為了實現(xiàn)向操作系統(tǒng)返回最大內(nèi)存量的目標(biāo),G1 將在應(yīng)用程序不活動期間定期執(zhí)行或觸發(fā)并發(fā)周期以確定整體 Java 堆使用情況。這將導(dǎo)致它自動將 Java 堆的未使用部分返回給操作系統(tǒng)。而在用戶控制下,可以可選地執(zhí)行完整的 GC,以使返回的內(nèi)存量最大化。