△ Java 12/JDK 12 GA 發(fā)布公告
自 2 月 7 日開始,Java 12 / JDK 12 就進(jìn)入了 RC 階段。按照發(fā)布周期,美國當(dāng)?shù)貢r間 3 月 19 日,AVA高階交流群:851531810也就是今天 Java 12 正式發(fā)布了!
新特性
Java 12 帶來了一系列新特性:
下邊分別來看看:AVA高階交流群:851531810
JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
Shenandoah:低暫停時間的 GC(實(shí)驗(yàn)性功能)
新增了一個名為 Shenandoah 的 GC 算法,通過與正在運(yùn)行的 Java 線程同時進(jìn)行evacuation?工作來減少 GC 暫停時間。使用 Shenandoah 的暫停時間與堆大小無關(guān),這意味著無論堆是 200MB 還是 200GB,都將具有相同的暫停時間。
JEP 230: Microbenchmark Suite
微基準(zhǔn)測試套件
JDK 源碼中新增了一套微基準(zhǔn)測試套件,開發(fā)人員可通過它輕松運(yùn)行已有的微基準(zhǔn)測試并創(chuàng)建新的基準(zhǔn)測試。
JEP 325: Switch Expressions (Preview)
Switch 表達(dá)式(預(yù)覽功能)
對 switch 語句進(jìn)行了擴(kuò)展,使其不僅可以作為語句(statement),還可以作為表達(dá)式(expression),并且兩種寫法都可以使用傳統(tǒng)的 switch 語法,或者使用簡化的 "case L ->" 模式匹配語法作用于不同范圍并控制執(zhí)行流。這些更改將簡化日常編碼工作,并為 switch 中的模式匹配(JEP 305)做好準(zhǔn)備。
JEP 334: JVM Constants API
JVM 常量 API
引入 API 來對關(guān)鍵類文件(key class-file)和運(yùn)行時工件(run-time artifacts)的名義描述(nominal descriptions)進(jìn)行建模,特別是可從常量池加載的常量。
在新的 java.lang.invoke.constant 包中定義了一系列基于值的符號引用(JVMS 5.1)類型,它們能夠描述每種可加載常量。
符號引用以純?nominal 形式描述可加載常量,與類加載或可訪問性上下文區(qū)分開。有些類可以作為自己的符號引用(例如 String),而對于可鏈接常量,定義了一系列符號引用類型(ClassDesc、MethodTypeDesc、MethodHandleDesc 和 DynamicConstantDesc),它們包含描述這些常量的 nominal 信息。
JEP 340: One AArch64 Port, Not Two
只保留一個 AArch64 實(shí)現(xiàn)
在保留 32 位 ARM 實(shí)現(xiàn)和 64 位 aarch64 實(shí)現(xiàn)的同時,刪除與 arm64 實(shí)現(xiàn)相關(guān)的所有源碼。
JDK 中存在兩套?64 位 ARM 實(shí)現(xiàn),主要存在于 src/hotspot/cpu/arm 和 open/src/hotspot/cpu/aarch64 目錄。兩者都實(shí)現(xiàn)了?aarch64,現(xiàn)在將只保留后者,刪除由?Oracle 提供的 arm64。這將使貢獻(xiàn)者將他們的精力集中在單個 64 位 ARM 實(shí)現(xiàn)上,并消除維護(hù)兩套實(shí)現(xiàn)所需的重復(fù)工作。
JEP 341: Default CDS Archives
默認(rèn)類數(shù)據(jù)共享歸檔文件
針對 64 位平臺,使用默認(rèn)類列表增強(qiáng) JDK 構(gòu)建過程,以生成類數(shù)據(jù)共享(class data-sharing,CDS)歸檔。
JEP 344: Abortable Mixed Collections for G1
可中止的 G1 混合 GC
如果混合 GC 的?G1?存在超出暫停目標(biāo)的可能性,則使其可中止。
JEP 346: Promptly Return Unused Committed Memory from G1
G1 及時返回未使用的已分配內(nèi)存
增強(qiáng) G1 GC,以便在空閑時自動將 Java 堆內(nèi)存返回給操作系統(tǒng)。
為了實(shí)現(xiàn)向操作系統(tǒng)返回最大內(nèi)存量的目標(biāo),G1 將在應(yīng)用程序不活動期間定期執(zhí)行或觸發(fā)并發(fā)周期以確定整體 Java 堆使用情況。這將導(dǎo)致它自動將 Java 堆的未使用部分返回給操作系統(tǒng)。而在用戶控制下,可以可選地執(zhí)行完整的 GC,以使返回的內(nèi)存量最大化。
觀望 JDK 13
根據(jù) JDK 13 的迭代計(jì)劃,預(yù)計(jì)其將于 2019 年 9 月發(fā)布 —— Java 現(xiàn)在采取“半年發(fā)布一次版本”的模式。
對于 JDK 13 的新特性,Oracle Java 平臺組首席架構(gòu)師?Mark Reinhold 做出了兩個預(yù)測:
原生字符串文字(Raw String Literals),它可以跨多行源碼而不對轉(zhuǎn)義字符進(jìn)行轉(zhuǎn)義。目標(biāo)是簡化 Java 的開發(fā),比如開發(fā)者可以可讀形式表示字符序列,而不會摻雜一些 Java 指示符,或者提供針對?Java 以外的語法的字符串。在 JDK 13 中進(jìn)行預(yù)期的測試運(yùn)行后,該功能可以在隨后的 JDK 14 版本中跟進(jìn)。
可用于生產(chǎn)環(huán)境的switch 表達(dá)式,JDK 13 中將帶來一個 beta 版本實(shí)現(xiàn)。switch 表達(dá)式擴(kuò)展了 switch 語句,使其不僅可以作為語句(statement),還可以作為表達(dá)式(expression),并且兩種寫法都可以使用傳統(tǒng)的 switch 語法,或者使用簡化的“case L ->”模式匹配語法作用于不同范圍并控制執(zhí)行流。這些更改將簡化日常編碼工作,并為 switch 中的模式匹配(JEP 305)做好準(zhǔn)備。AVA高階交流群:851531810
可訪問 http://openjdk.java.net/projects/jdk/13/ 查看 JDK 13 的相關(guān)信息。
討論
留意到不少開發(fā)者對 Raw String Literals 特性情有獨(dú)鐘,該特性類似于 JavaScript ES6 語法中的模板字符串,使用它基本可以告別丑陋的字符串拼接。特性詳見?http://openjdk.java.net/jeps/326。
該特性原計(jì)劃于 JDK 12 發(fā)布,可惜最后還是被取消了(不過可能會在 JDK 13 發(fā)布),詳見:
http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html
可能是因?yàn)闃I(yè)界呼聲太高,最近委員會又把這個特性拿出來重新討論了:
https://mail.openjdk.java.net/pipermail/amber-spec-experts/2019-January/000931.html
你最想要的 JDK 特性是什么?在留言區(qū)和大家分享吧!~