不知不覺java12都來了,而我還在用8。
說一下java12的新特性
1.JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
Shenandoah:低暫停時間的 GC(實驗性功能)
新增了一個名爲 Shenandoah 的 GC 算法,通過與正在運行的 Java 線程同時進行 evacuation 工作來減少 GC 暫停時間。使用 Shenandoah 的暫停時間與堆大小無關,這意味着無論堆是 200MB 還是 200GB,都將具有相同的暫停時間。
2.JEP 230: Microbenchmark Suite
微基準測試套件
JDK 源碼中新增了一套微基準測試套件,開發人員可通過它輕鬆運行已有的微基準測試並創建新的基準測試。
3.JEP 325: Switch Expressions (Preview)
Switch 表達式(預覽功能)
對 switch 語句進行了擴展,使其不僅可以作爲語句(statement),還可以作爲表達式(expression),並且兩種寫法都可以使用傳統的 switch 語法,或者使用簡化的 "case L ->" 模式匹配語法作用於不同範圍並控制執行流。這些更改將簡化日常編碼工作,併爲 switch 中的模式匹配(JEP 305)做好準備。
4.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 信息。
5.JEP 340: One AArch64 Port, Not Two
只保留一個 AArch64 實現
在保留 32 位 ARM 實現和 64 位 aarch64 實現的同時,刪除與 arm64 實現相關的所有源碼。
JDK 中存在兩套 64 位 ARM 實現,主要存在於 src/hotspot/cpu/arm 和 open/src/hotspot/cpu/aarch64 目錄。兩者都實現了 aarch64,現在將只保留後者,刪除由 Oracle 提供的 arm64。這將使貢獻者將他們的精力集中在單個 64 位 ARM 實現上,並消除維護兩套實現所需的重複工作。
6.JEP 341: Default CDS Archives
默認類數據共享歸檔文件
針對 64 位平臺,使用默認類列表增強 JDK 構建過程,以生成類數據共享(class data-sharing,CDS)歸檔。
7.JEP 344: Abortable Mixed Collections for G1
可中止的 G1 混合 GC
如果混合 GC 的 G1 存在超出暫停目標的可能性,則使其可中止。
8.JEP 346: Promptly Return Unused Committed Memory from G1
G1 及時返回未使用的已分配內存
增強 G1 GC,以便在空閒時自動將 Java 堆內存返回給操作系統。
爲了實現向操作系統返回最大內存量的目標,G1 將在應用程序不活動期間定期執行或觸發併發週期以確定整體 Java 堆使用情況。這將導致它自動將 Java 堆的未使用部分返回給操作系統。而在用戶控制下,可以可選地執行完整的 GC,以使返回的內存量最大化。
另外附上jdk12 api.chm 英文版