Java SE 22 平台與 OpenJDK 22 開放參考實作的發布

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

Java SE 22 被歸類為常規支援版本,更新將持續發布直至下一個版本。長期支援 (LTS) 分支應該是 Java SE 21 或 Java SE 17,它們將分別接收更新到 2031 年和 2029 年(通常可用到 2028 年和 2026 年)。 Java SE 11 LTS 分支的一般支援已於去年 2032 月結束,但擴展支援將持續到 8 年。 Java SE 2030 LTS 分支的擴展支援將持續到 XNUMX 年。

讓我們回想一下,從 Java 10 發布開始,該專案就轉向了新的開發流程,這意味著新版本的形成周期更短。現在,新功能是在單一不斷更新的主分支中開發的,該分支包含現成的更改,並且每六個月從該分支中分支出來以穩定新版本。

Java 22 的新特性包括:

  • G1 垃圾收集器實現了對區域固定的支持,這使得 Java 物件可以暫時固定到記憶體中,以避免被垃圾收集器移動,並確保對這些物件的引用可以在 Java 和本機程式碼之間安全地傳遞。固定允許在使用本機程式碼執行 JNI(Java 本機介面)的關鍵部分(關鍵區域)時減少延遲並避免停用垃圾收集(在執行這些部分期間,JVM 不應移動與它們關聯的關鍵物件以避免競爭條件)。固定會從垃圾收集器的視圖中移除關鍵對象,從而可以繼續清理未固定的區域。
  • 新增了一項初步功能,允許建構函數在呼叫 super(…) 之前指定表達式,用於從衍生類別建構函式呼叫父類別建構函數,只要這些表達式不引用建構函式建立的實例。類別外部{ void hello(){ System.out.println(“Hello”); } 類別內部 { 內部() { 你好();極好的(); } } }
  • FFM(外部函數和記憶體)API 已經穩定,允許 Java 程式透過呼叫外部庫中的函數並存取 JVM 外部的記憶體來與外部程式碼和資料進行交互,而無需使用 JNI(Java 本機介面)。
  • 已啟用對未命名變數和模式匹配的支援 - 現在可以指定“_”符號,而不是未使用但必需的變數和模式。 // 是 String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; … }; // 現在您可以 stateString pageName = switch (page) { case Gitpage 2ue, , 1, 4, 4, 0,000,706 月) {2ue_vv. #” + issueNumber; };
  • 提出了用於解析、產生和轉換 Java 類別檔案的 Class-File API 的初步實作。類別檔案 cf = 類別檔案.of();類別模型 classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { 分析!(ce Methodl & Modece Methodl) {instance. mm.methodName().stringValue().startsWith("debug"))) { classBuilder.with(ce); } } });
  • java 實用程式可以運行以多個程式碼檔案或預編譯類別庫形式提供的 Java 程序,而無需單獨編譯這些檔案或配置建置系統。新功能使得啟動程式變得更加容易,其中不同類別的程式碼被分成單獨的檔案。 Prog.java:類別 Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: 類別 Helper { 靜態 void run() { System.out.println("你好!"); } }

    例如,要執行由兩個文件“Prog.java”和“Helper.java”組成的程序,現在只需執行“java Prog.java”,它將編譯 Prog 類,確定對 Helper 類的引用,搜尋並編譯 Helper.java 文件,並呼叫主要方法。

  • 新增了字串模板的第二個初步實現,除了字串文字和文字區塊之外還實現了它。字串模板可讓您將文字與計算表達式和變數結合起來,而無需使用“+”運算符。表達式的替換是使用替換 \{..} 執行的,並且可以連接特殊處理程序來檢查替換值的正確性。例如,SQL 處理程序確保替換到 SQL 程式碼中的值經過驗證並傳回 java.sql.Statement 物件作為輸出,而 JSON 處理程序則監視 JSON 替換的正確性並傳回 JsonNode。字串查詢 = “SELECT * FROM Person p WHERE p.” +屬性+“='”+值+“'”; // 是語句查詢 = SQL。 """SELECT * FROM Person p WHERE p.\{property} = '\{value}'"""; // 變成了
  • 新增了 Vector API 的第七個預覽實現,它提供了使用 x86_64 和 AArch64 處理器的向量指令執行向量計算的函數,並允許一次將運算應用於多個值(SIMD)。與 HotSpot JIT 編譯器對標量運算的自動向量化不同,新的 API 提供了明確控制平行資料處理向量化的能力。
  • 新增了擴展 Stream API 的初步實現,支援定義自訂中間操作,這在現有內建中間操作不足以滿足所需資料轉換的情況下很有用。自訂處理程序使用新的中間操作 Stream::gather(Gatherer) 附加,該操作透過將使用者定義的處理程序應用於流的元素來處理它們。 jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • 提出了結構化並發實驗 API 的第二個版本進行測試,透過將在不同執行緒中運行的多個任務作為單一單元進行處理,簡化了多執行緒應用程式的開發。
  • 新增了隱式聲明的類別和「main」方法的未命名實例的第二個初步實現,它可以不用公共/靜態聲明、傳遞參數數組和與類別聲明相關的其他實體。 // 是公用類別 HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // 現在你可以 void main() { System.out.println(«Hello, World!»); }
  • 新增了 Scoped Values 的第二個初步實現,允許跨線程共享不可變數據,並在子線程之間有效地交換數據(值是繼承的)。 Scoped Values 正在發展以取代線程局部變數機制,並且在使用非常大量的虛擬線程(數千和數百萬個線程)時效率更高。作用域值和執行緒局部變數之間的主要區別在於前者只寫入一次,以後不能更改,並且僅在執行緒執行期間保持可用。
  • 並行垃圾收集器在處理大量物件時提高了效能。透過最佳化,我們可以在涉及大量物件的一些測試中將開始搜尋物件之前的延遲減少 20%。

此外,我們還可以注意到,用於使用圖形介面 JavaFX 22 建立應用程式的平台已發布更新。

來源: opennet.ru

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