Java 14 進入 Rampdown 階段,所有特性已凍結

Java 14 的發佈過程已經開始。 JDK 14 現在處於 Rampdown 第一階段,這意味著整個特性集已被凍結,並且此發行版不再涉及其他特性。

與以往的 Java 版本一樣,JEP(Java Enhancement Proposals,Java 增強提案)列表構成了該新版本的內容。最終確定的特性如下:

  • JEP 345: NUMA-Aware Memory Allocation for G1 (針對 G1 的 Numa-aware 內存分配)
  • JEP 349: JFR Event Streaming (JFP 事件流)
  • JEP 352: Non-Volatile Mapped Byte Buffers (非易失性映射字節緩衝區)
  • JEP 358: Helpful NullPointerExceptions (有用的空指針異常處理)
  • JEP 361: Switch Expressions (Standard) (標準版 Switch 表達式)

還有兩個 JEP 是涉及在其他平臺上進行 ZGC 垃圾收集器到達處理的:

  • JEP 364: ZGC on macOS (macOS 上的 ZGC)
  • JEP 365: ZGC on Windows (Windows 上的 ZGC)

接下來的幾個 JEP 是預覽版或孵化特性相關的:

  • JEP 305: Pattern Matching for instanceof (Preview) (預覽版 instanceof 模式匹配 )
  • JEP 343: Packaging Tool (Incubator) (孵化器:打包工具)
  • JEP 368: Text Blocks (Second Preview) (第二次預覽版文本塊)
  • JEP 370: Foreign-Memory Access API (Incubator) (孵化器:外部內存訪問 API)
  • JEP 359: Records (Preview) (預覽版 記錄類型)

這組 JEP 可能比最初出現時更有趣:它實際上包含了兩個重要的構建塊,這兩個構建塊組成了 Java 的主要新特性。

記錄類型特性本質上是將命名元組引入到 Java 中,並且它是代數數據類型(algebraic data types,其他語言中的稱謂)特性的前半部分。它的另一半是密封類型(sealed types)特性,密封類型對應於 JEP 360 ,並且尚未在任何版本中發佈。

未來特性的另一個構建塊是 JEP 305(“ instanceof 模式匹配 ”)。乍一看,這個特性似乎非常小,因為現在它只是在使用“instanceof”操作符時減少了難看的強制類型轉換樣板代碼:

複製代碼

<code>if (obj instanceof String s) {  //  這裡可以使用 s} else {  // 這裡不能使用 s}/<code>

雖然這個特性看起來微不足道,但它的真正威力始終會在未來版本的 Java 中體現出來。switch 表達式特性(也已作為 Java 14 的一部分進行了標準化)將用於構建 JEP 305 以生成通用模式匹配,這是一個主要的新特性,特別是與代數數據類型結合使用時。

最後,是一組不能嚴格說是特性的 JEP,因為它們僅處理功能的棄用或移除。

  • JEP 362: Deprecate the Solaris and SPARC Ports (棄用 Solaris 和 SPARC 端口)
  • JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination (棄用 ParallelScavenge + SerialOld GC 組合)
  • JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector (移除併發標記清除(CMS)垃圾收集器)
  • JEP 367: Remove the Pack200 Tools and API (移除 Pack200 工具和 API)

在某種程度上,這意味著 JDK 14 是一個可悲的里程碑:它標誌著 Java 在 Solaris 上走到了盡頭,Solaris 是 Java 技術首次出現時的平臺,早在 1995 年,它作為 Java 技術的第一個公開發行版本的一部分而首次亮相。

CMS 收集器的移除也是值得注意的。對於幾乎所有的現代工作負載,G1 的性能與 CMS 相當,甚至更好(經過很長一段時間的成熟和穩定之後)。然而,仍然存在一小部分低延遲、對暫停敏感的應用程序既無法忍受 G1 的暫停閾值,也無法支付像 Shenandoah 或 ZGC 等收集器的性能開銷。沒有針對這些工作負載的解決方案,實際上,它們必須保留在 Java 11 上才能在中短期內得到支持。

總的來說,雖然 Java 14 包含的主要特性僅在預覽狀態下發布,但它代表平臺向前邁出了重要一步。確實,到目前為止,Java 市場還沒有看到非 LTS 版本的大量使用,因此 Java 14 能否被極大程度地採用還有待觀察。

隨著 Java 14 特性的凍結和縮減,Java 開發庫的主線現在已轉向了 Java 15(該版本將於 2020 年 9 月上市)。


分享到:


相關文章: