1. 程式人生 > >Java 10 正式釋出了

Java 10 正式釋出了

在 Java 9 之後,Java 採用了基於時間釋出的策略,每 6 個月一個版本。這是採用新的釋出策略之後的第一個版本。

Java 10 主要有 12 個新特性。

具體來看看。

JEP 286: Local-Variable Type Inference

區域性變數的型別推導。

很多人都會吐槽 Java 程式碼寫起來太過繁瑣,特別是涉及泛型的時候。就像 C++,也基於 auto 關鍵字引入了型別推導功能。

Java 也計劃引入類似特性,語法是這樣的:

var list = new ArrayList<String>();  // infers ArrayList<String>var stream = list.stream();          // infers Stream<String>

該特性只能用於三種場景:

  • 帶有初始化資訊的區域性變數

  • 增強 for 迴圈中的索引

  • 傳統 for 迴圈中的區域性變數

看個複雜點的例子:

將 JDK 的多個程式碼倉庫合併到一個程式碼倉庫中。

看過 JDK 程式碼的應該知道,JDK 的不同功能分佈在不同程式碼倉庫中。以 JDK 9 為例,程式碼倉庫有 8 個: root, corba, hotspot,jaxp, jaxws, jdk, langtools 和 nashorn。其中 hotspot 是虛擬機器實現程式碼,jdk 是 Java 類庫和相關工具,langtools 是 javac 等工具,nashorn 是 JavaScript 引擎。

JEP 304: Garbage Collector Interface

垃圾收集器介面。

在 hotspot/gc 程式碼實現方面,引入一個乾淨的垃圾收集器介面,改進不同垃圾收集器原始碼的隔離性。這樣新增新的或者刪除舊的 GC,都會更容易。

JEP 307: Parallel Full GC for G1

為 G1 垃圾收集器引入並行 Full GC。

JEP 310: Application Class-Data Sharing

Java 之前就引入了類資料共享機制,Class data sharing (CDS) ,以減少 Java 程式的啟動時間,降低記憶體佔用。簡單來說,Java 安裝程式會把 rt.jar 中的核心類提前轉化成內部表示,轉儲到一個共享的檔案中(shared archive)。多個 Java 程序(或者說 JVM 例項)可以共享這部分資料。


現在,希望更近一步,支援應用類的資料共享。

JEP 312: Thread-Local Handshakes

修改安全點機制,使得部分回撥操作只需要停掉單個執行緒,而不像以前那樣,只能選擇或者停掉所有執行緒,或者都不停止。

JEP 313: Remove the Native-Header Generation Tool (javah)

去掉 javah 工具。

從  JDK 8 開始,javah 的功能已經整合到了 javac 中。所以,javah 可以刪掉了。

JEP 314: Additional Unicode Language-Tag Extensions

額外的 Unicode 語言標籤擴充套件。

增強 java.util.Locale  和相關 API,實現 BCP 47 語言標籤中額外的 Unicode 擴充套件。

JEP 316: Heap Allocation on Alternative Memory Devices

在可選記憶體裝置上分配堆記憶體。

支援將 Java 物件堆分配到 NV-DIMM 等記憶體裝置上。隨著 NV-DIMM 越來越便宜,未來的系統可能會搭載異構記憶體架構。

JEP 317: Experimental Java-Based JIT Compiler

實驗性的基於 Java 的 JIT 編譯器。

支援基於 Java 的 JIT 編譯器。相關工作主要基於 Graal。Graal 也是 Java 9 中引入的 AOT 編譯器的基礎。

JEP 319: Root Certificates

根證書。

在 JDK 中提供一組預設的根證書。

JEP 322: Time-Based Release Versioning

基於時間的版本字串。修改 Java SE 平臺和 JDK 版本字串機制。考慮和之前版本號的相容等問題,新的版本命名機制是:

$FEATURE.$INTERIM.$UPDATE.$PATCH$FEATURE,每次版本釋出加 1,不考慮具體的版本內容。(之前的主版本號部分)2018 年 3 月的版本是 JDK 10,9 月的版本是 JDK 11,依此類推。
$INTERIM,中間版本號,在大版本中間釋出的,包含問題修復和增強的版本,不會引入非相容性修改。
馬上下載嘗試吧!