Java SE 20 發布

經過六個月的開發,Oracle 發布了 Java SE 20(Java Platform, Standard Edition 20)平台,該平台使用 OpenJDK 開源項目作為參考實現。 除了刪除了一些已棄用的功能外,Java SE 20 保持與以前版本的 Java 平台的向後兼容性——大多數以前編寫的 Java 項目在新版本下運行時仍無需修改即可運行。 Java SE 20(JDK、JRE 和 Server JRE)的可安裝版本已為 Linux(x86_64、AArch64)、Windows(x86_64)和 macOS(x86_64、AArch64)準備。 Java 20 參考實現由 OpenJDK 項目開發,在 GPLv2 許可下完全開源,具有 GNU ClassPath 例外,允許動態鏈接到商業產品。

Java SE 20 被歸類為常規支持版本,更新將在下一個版本之前發布。 長期支持 (LTS) 分支應該是 Java SE 17,它將在 2029 年之前收到更新。 回想一下,從 Java 10 的發布開始,項目切換到新的開發流程,這意味著新版本的形成周期更短。 現在正在一個不斷更新的主分支中開發新功能,該分支包含已經完成的更改,並且每六個月從該分支分支一次以穩定新版本。

Java 20 的新特性包括:

  • 初步支援 Scoped Values,允許跨執行緒共享不可變資料以及子執行緒之間高效交換資料(值是繼承的)。 正在開發 Scoped Values 來取代線程局部變數機制,並且在使用大量虛擬線程(數千或數百萬線程)時效率更高。 作用域值和執行緒局部變數之間的主要區別在於,前者只寫入一次,以後不能更改,並且僅在執行緒執行期間保持可用。 類別伺服器 { 最終靜態 ScopedValue CURRENT_USER = new ScopedValue(); voidserve(Request request, Response response) { var level = (request.isAuthorized()? ADMIN : GUEST); } var user = new User(等級); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(請求, 回應)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) 拋出新的 InvalidUserException(); 返回新的 DBConnection(...); } }
  • 新增了記錄模式的第二個預覽,擴展了 Java 16 中引入的模式匹配功能來解析記錄類別的值。 例如: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • 在「switch」語句中加入了模式匹配的第四個初步實現,允許「case」標籤使用不精確的值,而是一次性覆蓋一系列值的靈活模式,而以前必須使用繁瑣的模式「if. ..else”表達式鏈。 static String formatterPatternSwitch(Object obj) { return switch (obj) { 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(); }; }
  • 新增了 FFM(外部函數和記憶體)API 的第二個初步實現,它允許您透過呼叫外部庫中的函數並存取 JVM 外部的記憶體來組織 Java 程式與外部程式碼和資料的交互。
  • 新增了虛擬線程的第二個預覽,它是輕量級線程,可以大大簡化高效能多執行緒應用程式的編寫和維護。
  • 新增了第二個用於結構化並行性的實驗性 API,該 API 透過將不同執行緒中執行的多個任務視為單一區塊來簡化多執行緒應用程式的開發。
  • 新增了 Vector API 的第五個預覽版,提供了在 x86_64 和 AArch64 處理器上使用向量指令執行向量計算的函數,並允許同時將運算應用於多個值 (SIMD)。 與 HotSpot JIT 編譯器中提供的標量操作自動向量化功能不同,新 API 可以明確控制平行資料處理的向量化。

來源: opennet.ru

添加評論