Java SE 15 發布

經過六個月的開發,Oracle 已發布 該平台 JavaSE 15 (Java 平台,標準版 15),開源 OpenJDK 專案用作參考實作。 Java SE 15 保持了與先前版本的 Java 平台的向後相容性;所有先前編寫的 Java 專案在新版本下運行時都將無需更改即可運行。 準備安裝 Java SE 15 版本(JDK、JRE 和 Server JRE) 準備好了 適用於 Linux (x86_64)、Windows 和 macOS。 OpenJDK專案開發的參考實現 Java的15 在 GPLv2 授權下完全開源,GNU ClassPath 例外允許與商業產品動態連結。

Java SE 15 被歸類為一般支援版本,並將繼續接收更新,直到下一個版本。 長期支援 (LTS) 分支應該是 Java SE 11,它將繼續接收更新直到 2026 年。 Java 8 之前的 LTS 分支將支援到 2020 年 2021 月。 下一個 LTS 版本計劃於 10 年 XNUMX 月發布。 讓我們提醒您,從Java XNUMX發布開始,該專案切換到了新的開發流程,這意味著新版本的形成週期更短。 現在,新功能是在一個不斷更新的主分支中開發的,其中包括現成的更改,並且每六個月從該分支分支一次以穩定新版本。

創新 Java的15 人們可以 標記:

  • 內建 支援EdDSA(Edwards-Curve Digital Signature Algorithm)數位簽章創建演算法 RFC 8032)。 所提出的EdDSA實作不依賴硬體平台,免受旁道攻擊(確保所有計算的恆定時間),並且在相同保護等級下,效能比現有的用C語言編寫的ECDSA實現更快。 例如,使用具有 126 位元密鑰的橢圓曲線的 EdDSA 表現出與具有 secp256r1 橢圓曲線和 128 位元密鑰的 ECDSA 類似的性能。
  • 添加 對密封類別和介面的實驗性支持,其他類別和介面不能使用它們來繼承、擴展或覆蓋實作。 密封類別還提供了一種比存取修飾符更具聲明性的方法來限制超類別的使用,基於明確列出允許擴展的子類別。

    包 com.example.geometry;

    公共密封類形狀
    允許 com.example.polar.Circle,
    com.example.quad.矩形,
    com.example.quad.simple.Square {…}

  • 添加 支援不能被其他類別的字節碼直接使用的隱藏類別。 隱藏類別的主要目的是在運行時動態生成類別並間接使用它們的框架中使用,透過 反射。 此類類別通常具有有限的生命週期,因此維護它們以從靜態生成的類別進行存取是不合理的,並且只會導致記憶體消耗增加。 隱藏類別也消除了對非標準 API sun.misc.Unsafe::defineAnonymousClass 的需求,該 API 預計將在將來刪除。
  • ZGC(Z Garbage Collector)垃圾收集器已經穩定並被認為可以廣泛使用。 ZGC 以被動模式運行,盡可能減少垃圾收集帶來的延遲(使用 ZGC 時的停頓時間不超過 10 毫秒),並且可以處理小型和大型堆,大小範圍從數百兆位元組到數 TB。
  • 穩定並可供一般使用
    垃圾收集器 雪蘭,以最少的暫停工作(低暫停時間垃圾收集器)。 Shenandoah 由 Red Hat 開發,因其使用的演算法而聞名,該演算法透過與 Java 應用程式的執行並行運行清理來減少垃圾收集期間的停頓時間。 垃圾收集器引入的延遲的大小是可預測的,並且不依賴堆的大小,即對於 200 MB 和 200 GB 的堆,延遲將是相同的(別出來 超過 50 毫秒,通常在 10 毫秒內);

  • 支援已穩定並引入該語言中 文字區塊 - 一種新形式的字串文字,可讓您在原始程式碼中包含多行文字數據,而無需使用字元轉義並保留區塊中的原始文字格式。 該塊由三個雙引號引起來。

    例如,代替程式碼

    字串 html = " » +
    “\n\t”+“ » +
    "\n\t\t" + " “Java 1 來了!” » +
    “\n\t”+“ » +
    “\n”+“ ”;

    您可以指定:

    字串 html = """


    »Java 1\
    在這兒!

    """;

  • 重做 舊版 DatagramSocket API。 java.net.DatagramSocket 和 java.net.MulticastSocket 的舊實現已被替換為更易於調試和維護的現代實現,並且還與項目內開發的虛擬流兼容 織機。 如果可能與現有程式碼不相容,舊的實作尚未刪除,可以使用 jdk.net.usePlainDatagramSocketImpl 選項啟用。
  • 提議的第二次實驗實施 模式匹配 在「instanceof」運算子中,它允許您立即定義一個局部變數來存取檢查的值。 例如,您可以立即編寫“if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}”,而無需明確定義“String s = (String) obj 」。

    曾是:

    if (obj實例組) {
    組group = (組) obj;
    var 條目 = group.getEntries();
    }

    現在你可以不用定義「Group group = (Group) obj」:

    if (obj instanceof Group 群組) {
    var 條目 = group.getEntries();
    }

  • 建議的 關鍵字「的第二次實驗實施記錄”,它為定義類別提供了一種緊湊的形式,允許您在資料僅儲存在行為不變的欄位中的情況下避免明確定義各種低階方法,例如equals()、hashCode() 和toString( )。 當一個類別使用 equals()、hashCode() 和 toString() 方法的標準實作時,它可以不需要它們的明確定義:

    公共記錄 BankTransaction(LocalDate 日期,
    雙倍金額
    字串描述){}

    除了建構函式和 getter 方法之外,此宣告還會自動加入 equals()、hashCode() 和 toString() 方法的實作。

  • 建議的 外部記憶體存取 API 的第二個預覽版,允許 Java 應用程式透過操作新的 MemorySegment、MemoryAddress 和 MemoryLayout 抽象來安全、有效率地存取 Java 堆外部的記憶體區域。
  • 殘障人士 並棄用了 HotSpot JVM 中使用的偏向鎖定最佳化技術,以減少鎖定開銷。 這項技術已經失去了與現代 CPU 提供的原子指令的系統的相關性,並且由於其複雜性而維護起來過於費力。
  • 已公佈 過時的機制 RMI啟用,這將在未來的版本中刪除。 值得注意的是,RMI 啟動已經過時,被歸類為 Java 8 中的選項類別,並且在現代實踐中幾乎從未使用過。
  • 已刪除 JavaScript引擎 犀牛,它在 Java SE 11 中已棄用。
  • 已刪除 Solaris OS 和 SPARC 處理器(Solaris/SPARC、Solaris/x64 和 Linux/SPARC)的連接埠。 刪除這些連接埠將使社群能夠加速 OpenJDK 新功能的開發,而無需浪費時間維護 Solaris 和 SPARC 特定功能。

來源: opennet.ru

添加評論