今天,Java 12 正式發佈了!

  自 2 月 7 日開始,Java 12 / JDK 12 就進入了 RC 階段。按照發布週期,美國當地時間 3 月 19 日,也就是今天——Java 12 正式發佈了!html

  

 

  Java 12 新特性java

  Java 12 帶來了一系列新特性:算法

  

 

  下邊分別來看看:express

  JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)架構

  Shenandoah:低暫停時間的 GC(實驗性功能)併發

  新增了一個名爲 Shenandoah 的 GC 算法,經過與正在運行的 Java 線程同時進行 evacuation 工做來減小 GC 暫停時間。使用 Shenandoah 的暫停時間與堆大小無關,這意味着不管堆是 200MB 仍是 200GB,都將具備相同的暫停時間。測試

  JEP 230: Microbenchmark Suiteui

  微基準測試套件編碼

  JDK 源碼中新增了一套微基準測試套件,開發人員可經過它輕鬆運行已有的微基準測試並建立新的基準測試。spa

  JEP 325: Switch Expressions (Preview)

  Switch 表達式(預覽功能)

  對 switch 語句進行了擴展,使其不只能夠做爲語句(statement),還能夠做爲表達式(expression),而且兩種寫法均可以使用傳統的 switch 語法,或者使用簡化的 "case L ->" 模式匹配語法做用於不一樣範圍並控制執行流。這些更改將簡化平常編碼工做,併爲 switch 中的模式匹配(JEP 305)作好準備。

  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 信息。

  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 實現上,並消除維護兩套實現所需的重複工做。

  JEP 341: Default CDS Archives

  默認類數據共享歸檔文件

  針對 64 位平臺,使用默認類列表加強 JDK 構建過程,以生成類數據共享(class data-sharing,CDS)歸檔。

  JEP 344: Abortable Mixed Collections for G1

  可停止的 G1 混合 GC

  若是混合 GC 的 G1 存在超出暫停目標的可能性,則使其可停止。

  JEP 346: Promptly Return Unused Committed Memory from G1

  G1 及時返回未使用的已分配內存

  加強 G1 GC,以便在空閒時自動將 Java 堆內存返回給操做系統。

  爲了實現向操做系統返回最大內存量的目標,G1 將在應用程序不活動期間按期執行或觸發併發週期以肯定總體 Java 堆使用狀況。這將致使它自動將 Java 堆的未使用部分返回給操做系統。而在用戶控制下,能夠可選地執行完整的 GC,以使返回的內存量最大化。

  上述每個新特性都有詳細的說明文檔,點擊「閱讀原文」能夠跳轉查看。

  JDK 13 還會遠嗎?

  根據 JDK 13 的迭代計劃,預計其將於 2019 年 9 月發佈 —— Java 如今採起「半年發佈一次版本」的模式。

  對於 JDK 13 的新特性,Oracle Java 平臺組首席架構師 Mark Reinhold 作出了兩個預測:

  原生字符串文字(Raw String Literals),它能夠跨多行源碼而不對轉義字符進行轉義。目標是簡化 Java 的開發,好比開發者能夠可讀形式表示字符序列,而不會摻雜一些 Java 指示符,或者提供針對 Java 之外的語法的字符串。在 JDK 13 中進行預期的測試運行後,該功能能夠在隨後的 JDK 14 版本中跟進。

  可用於生產環境的 switch 表達式,JDK 13 中將帶來一個 beta 版本實現。switch 表達式擴展了 switch 語句,使其不只能夠做爲語句(statement),還能夠做爲表達式(expression),而且兩種寫法均可以使用傳統的 switch 語法,或者使用簡化的「case L ->」模式匹配語法做用於不一樣範圍並控制執行流。這些更改將簡化平常編碼工做,併爲 switch 中的模式匹配(JEP 305)作好準備。

  可訪問 http://openjdk.java.net/projects/jdk/13/ 查看 JDK 13 的相關信息。

  討論:開發者如何看待 Java 12?

  留意到很多開發者對 Raw String Literals 特性情有獨鍾,該特性相似於 JavaScript ES6 語法中的模板字符串,使用它基本能夠告別醜陋的字符串拼接(特性詳見 http://openjdk.java.net/jeps/326)。

  該特性原計劃於 JDK 12 發佈,惋惜最後仍是被取消了(不過可能會在 JDK 13 發佈),詳見:http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html。

  多是由於業界呼聲過高,最近委員會又把這個特性拿出來從新討論了:https://mail.openjdk.java.net/pipermail/amber-spec-experts/2019-January/000931.html。

  大連市婦科醫院 http://yiyuan.120ask.com/dlfk/news/

相關文章
相關標籤/搜索