1. 程式人生 > 其它 >JDK13新特性學習(一)

JDK13新特性學習(一)

技術標籤:javajdk

switch表示式

傳統switch語句弊端:

  1. 匹配自上而下執行,忘記寫break,後面的case無論是否匹配都會執行
  2. 所有的case公用一個塊範圍,不同case語句中的變數不能重名
  3. 不能在一個case中寫多個執行結果一致的條件(case A, B, C: xxx;
  4. 整個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記憶體佔用減少。

JDK12之前想用CDS,必須使用java -Xshare:dump作為額外步驟來執行,JDK12之後預設生成CDS,檔案儲存在${JAVA_HOME}/lib/server目錄下,檔名叫classes.jsa

可中斷的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中不使用的堆。