Java14新特性
Java14已如期于2020年3月17日正式發(fā)布求豫。這一個版本中主要帶來了ZGC增強右蒲、instanceof增強幢妄,switch表達式 標(biāo)準(zhǔn)本、增強和新功能幢尚。
instanceof模式匹配(預(yù)覽階段)
- 對instanceof 進行改進破停,由原來的檢查對象類型。變成了先對對象進行類型匹配尉剩,校驗成功之后轉(zhuǎn)換成 對應(yīng)類型真慢,然后再復(fù)制給局部變量,并且只有當(dāng)模式匹配表達式匹配成功才會生效喝復(fù)制理茎。局部變量只能在當(dāng)前代碼塊使用
if (person instanceof Student student) { student.say(); // other student operations } else if (person instanceof Teacher teacher) { teacher.say(); // other teacher operations }
G1的NUMA可識別內(nèi)存分配
- 改進非一致性系統(tǒng)內(nèi)存訪問的G1垃圾收集器整體性能黑界,主要針對年輕代內(nèi)存分配優(yōu)化.
- 創(chuàng)建新對象->分配內(nèi)存->存放內(nèi)存(region)->(支持NUMA)分配當(dāng)前線程NUMA節(jié)點空閑內(nèi)存區(qū)≡砹郑基于同一個對象創(chuàng)建調(diào)用頻率較高园爷,存活時間短(能夠提高一些大型計算機的G1內(nèi)存分配回收性能)
- 啟動可識別內(nèi)存分配
-XX:+UseNUMA
改進NullPointExceptions提示信息
改進空指針提示信息 幫助我們更加直觀找到 Null變量
public static void main(String[] args) { String str=null; System.out.println(str.length()); } //Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null at com.study.TestPros.main(TestPros.java:7)
Record類型(預(yù)覽功能)
- Java14引入了record類型 支持更加緊湊的方式去聲明一個類,而這些類能夠作為不可變數(shù)據(jù)類型的封裝持有者式撼。
public class TestPros { public static void main(String[] args) { } public record person(String name, int age) { public String getName() { return this.name; } public int getAge() { return age; } } }
反編譯結(jié)果
public class TestPros { public TestPros() { } public static void main(String[] args) { } public static record person(String name, int age) { public person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } public String name() { return this.name; } public int age() { return this.age; } } }
- 1個有參構(gòu)造函數(shù)
- 獲取屬性值的方法
- 自定義的獲取name和age方法
- 不能再record聲明的類中定義示例字段,類也不能聲明為抽象類
Java14引入了record類求厕,所以在java.lang.Class引入了2個新方法
RecordComponent[] getRecordComponents() boolean isRecord()
Switch表達式正式版
switch表達式在Java14當(dāng)中更新未正式版本著隆,結(jié)束了在Java12 和Java13的預(yù)覽版本。
注:
- 需要保持與之前 switch 語句同樣的 case 分支情況
- 使用 yield 關(guān)鍵字來返回 case 分支需在 Java 14 表達式中呀癣,表達式默認(rèn)執(zhí)行完之后自動跳出美浦,不會繼續(xù)往后執(zhí)行要返回的結(jié)果
- switch 表達式中不再需要顯式地使用 return、break 或者 continue 來跳出當(dāng)前分支
- 在 Java 14 表達式中项栏,表達式默認(rèn)執(zhí)行完之后自動跳出浦辨,不會繼續(xù)往后執(zhí)行
- 相同的
case
方法塊,可以將case
條件并列public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int day = scanner.nextInt(); int number = switch (day) { case 1, 2, 3 -> 10; case 5 -> 5; default -> 0; }; System.out.println(number); }
刪除CMS垃圾回收器
- Java14 正式移除了CMS垃圾回收器
ZGC支持MacOS和Windows系統(tǒng)(實驗階段)
Java14在之前的Linux/x64增加了MacOS和windows系統(tǒng)沼沈,解決了開發(fā)人員你需要在桌面操作系統(tǒng)中使用ZGC問題流酬。在MacOS和Windows下面開啟ZGC的方式需要使用vm參數(shù)
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
啟用ParallelScavenge和SeialOld GC的組合使用
1.年輕代當(dāng)中使用并行算法、老年代使用串行算法列另,混搭使用芽腾,太過冒險。所以Java14考慮將這兩GC的組合啟用 采用如下參數(shù) 去棄用該組合參數(shù)
-XX:+UseParallelGC -XX:-UseParallelOldGC
文本塊(第二預(yù)覽版本)
- Java14 在13的基礎(chǔ)上新增了 兩個轉(zhuǎn)義符 “\”和“\s"
- \行終止符
- \s 表示一個空格
stripIndent()
:用于從文本塊中去除空白字符translateEscapes()
:用于翻譯轉(zhuǎn)義字符formatted(Object... args)
:用于格式化