Java SE 20 リリース

20 か月の開発を経て、Oracle は、OpenJDK オープンソース プロジェクトをリファレンス実装として使用する Java SE 20 (Java Platform, Standard Edition 20) プラットフォームをリリースしました。 一部の非推奨機能の削除を除き、Java SE 20 は Java プラットフォームの以前のリリースとの下位互換性を維持します。以前に作成された Java プロジェクトのほとんどは、新しいバージョンで実行しても変更なしで機能します。 Java SE 86 (JDK、JRE、および Server JRE) のインストール可能なビルドは、Linux (x64_64、AArch86)、Windows (x64_86)、および macOS (x64_64、AArch20) 用に用意されています。 OpenJDK プロジェクトによって開発された Java 2 リファレンス実装は、商用製品への動的なリンクを可能にする GNU ClassPath 例外を含む、GPLvXNUMX ライセンスに基づく完全なオープン ソースです。

Java SE 20 は通常のサポート リリースとして分類されており、次のリリースの前に更新がリリースされます。 Long Term Support (LTS) ブランチは Java SE 17 である必要があり、2029 年までアップデートを受け取ります。 Java 10 のリリース以降、プロジェクトは新しい開発プロセスに切り替わったことを思い出してください。これは、新しいリリースの形成サイクルが短縮されることを意味します。 新しい機能は現在、常に更新される XNUMX つのマスター ブランチで開発されており、すでに完了した変更が組み込まれており、そこから新しいリリースを安定させるために XNUMX か月ごとにブランチが分岐されます。

Java 20 の新機能は次のとおりです。

  • スコープ付き値の予備的なサポートがあり、不変のデータをスレッド間で共有したり、子スレッド間でデータを効率的に交換したりできます (値は継承されます)。スコープ付き値は、スレッドローカル変数メカニズムを置き換えるために開発されており、非常に多数の仮想スレッド (数千または数百万のスレッド) を使用する場合により効率的です。スコープ付きの値とスレッドローカル変数の主な違いは、前者は一度書き込まれ、将来変更することができず、スレッドの実行中のみ使用可能なままであることです。 class Server {final static Sc​​opedValue CURRENT_USER = new ScopedValue(); voidserve(Request リクエスト, Response レスポンス) { var level = (request.isAuthorized()? ADMIN : GUEST); var user = 新しいユーザー(レベル); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(リクエスト, レスポンス)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException();新しい DBConnection(...) を返します。 } }
  • レコード パターンの 16 番目のプレビューが追加され、Java XNUMX で導入されたパターン マッチング機能を拡張してレコード クラスの値を解析します。例: Record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x+y); } }
  • 「switch」ステートメントでのパターン マッチングの XNUMX 番目の予備実装が追加され、「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 (Foreign Function & Memory) API の XNUMX 番目の予備実装が追加されました。これにより、外部ライブラリから関数を呼び出したり、JVM の外部のメモリにアクセスしたりすることで、Java プログラムと外部コードおよびデータの対話を整理できるようになります。
  • 仮想スレッドの XNUMX 番目のプレビューが追加されました。これは、高性能マルチスレッド アプリケーションの作成と保守を大幅に簡素化する軽量スレッドです。
  • 構造化並列処理用の XNUMX 番目の実験 API を追加しました。これは、異なるスレッドで実行されている複数のタスクを XNUMX つのブロックとして扱うことにより、マルチスレッド アプリケーションの開発を簡素化します。
  • Vector API の 86 番目のプレビューが追加され、x64_64 および AArchXNUMX プロセッサ上のベクトル命令を使用して実行され、操作を複数の値 (SIMD) に同時に適用できるベクトル計算の関数が提供されます。 HotSpot JIT コンパイラで提供されるスカラー演算の自動ベクトル化機能とは異なり、新しい API では並列データ処理のベクトル化を明示的に制御できます。

出所: オープンネット.ru

コメントを追加します