JDK13新特性學習(一)
阿新 • • 發佈:2020-12-14
switch表示式
傳統switch語句弊端:
- 匹配自上而下執行,忘記寫break,後面的case無論是否匹配都會執行
- 所有的case公用一個塊範圍,不同case語句中的變數不能重名
- 不能在一個case中寫多個執行結果一致的條件(
case A, B, C: xxx;) - 整個switch不能作為表示式的返回值
Fruit fruit = Fruit.APPLE;
int num = switch(fruit) {
case PEAR -> {
System.out.println(1);
return 1;
}
case APPLE, ORANGE - > 2;
default -> throw new IllegalStateException("error");
}
微基準測試套件
它基於JMH(Java Microbenchmark Harness),為JDK原始碼添加了一套基準測試,簡化了現有的微基準測試的執行和新基準測試的建立,其目標在於提供一個穩定且便捷的基準。
微基準套件與JDK在同一目錄中,並且在構建後生成單個jar檔案。使用者需要執行命令:make build-microbenchmark 開啟構建套件
預設生成類資料共享歸檔檔案
在同一個虛擬機器上啟動多個JVM時,如果每個虛擬機器都單獨裝載自己需要的所有類,啟動成本和記憶體佔用成本很高。所以java團隊引入了類資料共享機制(CDS),將一些核心類在每個JVM中共享,使啟動時間減少,JVM記憶體佔用減少。
可中斷的G1混合GC
當G1垃圾回收器的回收超過暫停時間的目標,能中止垃圾回收過程,目的是使使用者能夠設定預期的JVM停頓時間。
G1將GC回收集分為了mandatory(緊急)和optional(可選)兩部分,若處理完mandatory後的時間小於設定的預期時間則會繼續處理optional。
mandatory包括G1不能遞增處理的GC回收集,如新生代;optional部分處理粒度取決於剩餘時間。
增強G1
G1能夠在空閒時間將java堆記憶體返還給作業系統。
在JDK12以前,G1只有在full GC和併發處理週期的時候才會返還記憶體,而這兩種情況都是G1極力避免的情況,因為這會導致效能的損失。所以在大多數的情況下,除非有外部強制執行,不然不會及時歸還記憶體。
具體實現是G1在應用程式不活動期間定期生成或迴圈整體java堆的使用情況,以便G1能及時發現java中不使用的堆。