Java SE 17 發布

經過六個月的開發,Oracle 發布了 Java SE 17 平台(Java 平台標準版 17),該平台以開源 OpenJDK 專案作為參考實作。除了移除一些已棄用的功能外,Java SE 17 保持了與 Java 平台先前版本的向後相容性——大多數先前編寫的 Java 專案在新版本下運行時無需任何修改。 Java SE 17(JDK、JRE 和 Server JRE)的即用型建置版本已準備就緒。 Linux (x86_64,AArch64), Windows (x86_64)和 macOS (x86_64,AArch64)。 Java 17 參考實作由 OpenJDK 專案開發,完全開源,採用 GPLv2 許可證,並帶有 GNU ClassPath 例外,允許與商業產品進行動態連結。

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

Java 17 的新特性包括:

  • 提出了「switch」表達式中模式匹配的實驗性實現,它允許在「case」標籤中使用不精確的值,而是一次覆蓋一系列值的靈活模板,而以前必須使用繁瑣的模板「if. ..else”表達式鏈。 此外,「switch」具有處理NULL值的能力。 對象 o = 123L; 字串格式化 = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); 預設 -> o.toString(); };
  • 對密封類別和介面的穩定支持,其他類別和介面不能使用它們來繼承、擴展或重寫實作。 密封類別還提供了一種比存取修飾符更具聲明性的方法來限制超類別的使用,基於明確列出允許擴展的子類別。 包 com.example.geometry; 公共密封類別 Shape 允許 com.example.polar.Circle、com.example.quad.Rectangle、com.example.quad.simple.Square {…}
  • 提出了 Vector API 的第二個預覽版,它提供了向量計算的函數,這些函數在 x86_64 和 AArch64 處理器上使用向量指令執行,並允許同時將運算應用於多個值 (SIMD)。 與 HotSpot JIT 編譯器中提供的標量操作自動向量化功能不同,新 API 可以明確控制平行資料處理的向量化。
  • 新增了外部函數和記憶體 API 的預覽,該 API 允許應用程式與 Java 運行時以外的程式碼和資料進行互動。 新的 API 可讓您有效率地呼叫非 JVM 函數並存取非 JVM 管理的記憶體。 例如,您可以從外部共用程式庫呼叫函數並存取流程數據,而無需使用 JNI。
  • 渲染引擎 macOS提供 Java 2D API 的平台(此 API 又被 Swing API 使用)已適配 Metal 圖形 API。預設情況下,該平台 macOS OpenGL 仍然在使用,啟用 Metal 支援需要設定參數“-Dsun.java2d.metal=true”,並且至少需要以下版本。 macOS 10.14.x。
  • 為平台添加了端口 macOS/AArch64(基於新型 Apple M1 晶片的 Apple 電腦)。此移植版的一個特殊之處在於支援 W^X(寫異或執行)記憶體保護機制,該機制可防止記憶體頁同時處於可寫入和可執行狀態。 (程式碼只能在停用寫入存取後執行,而對記憶體頁的寫入也只能在停用執行存取後進行。)
  • 恢復為僅對浮點表達式使用嚴格的fp 語意。 自 Java 1.2 發布以來,對「預設」語意的支援已停止,包括對具有非常舊的 x87 數學協處理器的系統的工作簡化(在 SSE2 指令出現後,對附加語義的需求消失了)。
  • 已經實現了偽隨機數生成器的新型接口,並且還實現了其他演算法以更好地生成隨機數。 應用程式有機會選擇產生偽隨機數的演算法。 改進了對產生隨機物件流的支援。
  • 對所有 JDK 內部進行嚴格封裝,但關鍵 API(如 sun.misc.Unsafe 除外)。 嚴格的封裝會阻止程式碼存取內部類別、方法和欄位的嘗試。 以前,可以使用「--illegal-access=permit」選項來停用嚴格封裝模式,但現已棄用。 需要存取內部類別、方法和欄位的應用程式應使用清單檔案中的 --add-opens 選項或 Add-Opens 屬性明確定義它們。
  • 應用程式現在可以定義資料反序列化過濾器,這些過濾器可以根據上下文動態選擇,並與特定的反序列化操作結合使用。您定義的篩選器將套用於整個資料。 虛擬機 (JVM 範圍),也就是說,它們不僅涵蓋應用程式本身,還涵蓋應用程式中使用的第三方程式庫。
  • Swing 新增了 javax.swing.filechooser.FileSystemView.getSystemIcon 方法來載入大圖標,以改進高 DPI 螢幕上的 UI。
  • java.net.DatagramSocket API 提供連接到多重播放群組的支持,而無需單獨的 java.net.MulticastSocket API。
  • IGV(理想圖形視覺化工具)實用程式已改進,可在 HotSpot VM C2 JIT 編譯器中提供中間程式碼表示的互動式視覺化。
  • 在JavaDoc中,與javac編譯器類比,當輸出錯誤時,現在會指示原始檔中有問題的行號以及錯誤的位置。
  • 新增了native.encoding屬性,反映系統字元編碼的名稱(UTF-8、koi8-r、cp1251等)。
  • 新增了 java.time.InstantSource 接口,允許在不參考時區的情況下進行時間操作。
  • 新增了 java.util.HexFormat API,用於轉換為十六進位表示形式,反之亦然。
  • 編譯器中新增了黑洞模式,可以停用死碼消除操作,可以在進行效能測試時使用。
  • 運行時新增“-Xlog:async”選項以非同步模式記錄日誌。
  • 建立安全連線時,預設啟用 TLS 1.3(之前使用 TLS 1.2)。
  • 先前聲明過時的 Applet API(java.applet.Applet*、javax.swing.JApplet)用於在瀏覽器中運行 Java 應用程序,現已移至預定刪除類別(支援結束後失去相關性)用於瀏覽器的Java 插件)。
  • 安全管理器早已失去了相關性,並且在瀏覽器插件支援結束後無人認領,已移至計劃刪除的類別。
  • RMI 啟動機制已被刪除,該機制已過時,屬於 Java 8 中的選項類別,並且在現代實踐中幾乎從未使用過。
  • 一個實驗性編譯器,支援 JIT(即時)為 HotSpot JVM 動態編譯 Java 程式碼,以及在啟動虛擬機之前將類別預期編譯(AOT,提前)為機器碼的模式,已從 SDK 中刪除。 該編譯器是用 Java 編寫的,基於 Graal 專案的工作。 值得注意的是,編譯器的維護需要大量的人力,在沒有開發人員需求的情況下這是不合理的。

來源: opennet.ru

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster