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,中間版本號,在大版本中間釋出的,包含問題修復和增強的版本,不會引入非相容性修改。
馬上下載嘗試吧!