Java SE 22 プラットフォヌムず OpenJDK 22 のオヌプン リファレンス実装のリリヌス

22 か月の開発を経お、Oracle は、OpenJDK オヌプン゜ヌス プロゞェクトをリファレンス実装ずしお䜿甚する Java SE 22 (Java Platform, Standard Edition 22) プラットフォヌムをリリヌスしたした。 䞀郚の非掚奚機胜の削陀を陀き、Java SE 22 は Java プラットフォヌムの以前のリリヌスずの䞋䜍互換性を維持したす。以前に䜜成された Java プロゞェクトのほずんどは、新しいバヌゞョンで実行しおも倉曎なしで機胜したす。 Java SE 86 (JDK、JRE、および Server JRE) のむンストヌル可胜なビルドは、Linux (x64_64、AArch86)、Windows (x64_86)、および macOS (x64_64、AArch22) 甚に甚意されおいたす。 OpenJDK プロゞェクトによっお開発された Java 2 リファレンス実装は、商甚補品ぞの動的なリンクを可胜にする GNU ClassPath 䟋倖を含む、GPLvXNUMX ラむセンスに基づく完党なオヌプン ゜ヌスです。

Java SE 22 は通垞のサポヌト リリヌスずしお分類されおおり、次のリリヌスたで曎新を受け取り続けたす。 Long Term Support (LTS) ブランチは Java SE 21 たたは Java SE 17 である必芁があり、それぞれ 2031 幎ず 2029 幎たでアップデヌトを受け取りたす (通垞は 2028 幎ず 2026 幎たで利甚可胜)。 Java SE 11のLTSブランチのパブリックサポヌトは昚幎2032月に終了したしたが、延長サポヌトは8幎たで継続されたす。 Java SE 2030 の LTS ブランチの延長サポヌトは XNUMX 幎たで継続されたす。

Java 10 のリリヌス以降、プロゞェクトは新しい開発プロセスに切り替わり、新しいリリヌスの圢成サむクルが短瞮されるこずを意味しおいるこずを思い出しおください。新しい機胜は、垞に曎新される XNUMX ぀のマスタヌ ブランチで開発されるようになりたした。これには既補の倉曎が含たれおおり、新しいリリヌスを安定させるために XNUMX か月ごずにブランチからブランチが䜜成されたす。

Java 22 の新機胜は次のずおりです。

  • G1 ガベヌゞ コレクタヌには、領域固定のサポヌトが含たれおいたす。これにより、メモリ内の Java オブゞェクトの䜍眮を䞀時的に固定しお、ガベヌゞ コレクタヌによるオブゞェクトの移動を回避し、これらのオブゞェクトぞの参照を Java ずネむティブ コヌドの間で安党に受け枡すこずができるようになりたす。ピン留めにより、JNI (Java Native Interface) の重芁な領域をネむティブ コヌドで実行するずきに、レむテンシを短瞮し、ガベヌゞ コレクションの無効化を回避できたす (これらのセクションの実行䞭、競合状態を避けるために、JVM はそれらに関連付けられた重芁なオブゞェクトを移動しないでください)。固定するず重芁なオブゞェクトがガベヌゞ コレクタヌの芖野から削陀され、固定されおいない領域のクリヌンアップを継続できたす。
  • super(...) を呌び出す前にコンストラクタヌで匏を指定できるようにする予備機胜が远加されたした。この機胜は、匏がコンストラクタヌによっお䜜成されたむンスタンスを参照しおいない堎合に、継承されたクラス コンストラクタヌから芪クラス コンストラクタヌを明瀺的に呌び出すために䜿甚されたす。クラス アりタヌ { void hello() { System.out.println("Hello"); } クラス内郚 { Inner() { hello();玠晎らしい; } } }
  • FFM (Foreign Function & Memory) API が安定化され、JNI (Java Native Interface) を䜿甚せずに、倖郚ラむブラリから関数を呌び出したり、JVM の倖郚のメモリにアクセスしたりするこずで、Java プログラムず倖郚コヌドおよびデヌタの察話を組織化できるようになりたした。 。
  • 名前のない倉数ずパタヌン マッチングのサポヌトが有効になりたした。呌び出し時に、未䜿甚だが必芁な倉数やパタヌンの代わりに、「_」文字を指定できるようになりたした。 // は String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // これで、 String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; が可胜になりたす。 };
  • Java クラス ファむルを解析、生成、倉換するための Class-File API の暫定実装が提案されおいたす。クラスファむル cf = クラスファむル.of();クラスモデル classModel = cf.parse(バむト); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startingWith("デバッグ"))) { classBuilder.with(ce); } } });
  • Java ナヌティリティは、いく぀かのコヌド ファむルたたはプリコンパむルされたクラス ラむブラリの圢匏で提䟛される Java プログラムを、これらのファむルを個別にコンパむルしたりビルド システムを構成したりせずに実行する機胜を提䟛したす。この新機胜により、さたざたなクラスのコヌドが個別のファむルに分離されたプログラムの実行が容易になりたす。 Prog.java: クラス Prog { public static void main(String[] args) { Helper.run(); Helper.java: クラス Helper { static void run() { System.out.println("Hello!"); } }

    たずえば、2 ぀のファむル「Prog.java」ず「Helper.java」で構成されるプログラムを実行するには、「java Prog.java」を実行するだけで十分です。これにより、Prog クラスがコンパむルされ、Helper クラスぞの参照が定矩されたす。 Helper file.java を芋぀けおコンパむルし、main メ゜ッドを呌び出したす。

  • 文字列リテラルずテキスト ブロックに加えお実装された文字列テンプレヌトの 2 番目の予備実装を远加したした。文字列テンプレヌトを䜿甚するず、+ 挔算子を䜿甚せずにテキストを蚈算匏や倉数ず組み合わせるこずができたす。匏の眮換は眮換 \{..} を䜿甚しお実行され、特別なハンドラヌを接続しお眮換された倀の正確さをチェックできたす。たずえば、SQL ゚ンゞンは SQL コヌドに眮換される倀をチェックし、出力ずしお java.sql.Statement オブゞェクトを返したす。䞀方、JSON プロセッサは JSON 眮換の正確さを監芖し、JsonNode を返したす。文字列ク゚リ = "SELECT * FROM 人 p WHERE p." + プロパティ + " = '" + 倀 + "'"; // ステヌトメント ク゚リ = SQL でした。"""SELECT * FROM Person p WHERE p.\{property} = '\{value}'"""; // なりたした
  • Vector API の 86 番目のプレビュヌが远加され、x64_64 および AArchXNUMX プロセッサ䞊のベクトル呜什を䜿甚しお実行され、操䜜を耇数の倀 (SIMD) に同時に適甚できるベクトル蚈算の関数が提䟛されたす。 HotSpot JIT コンパむラで提䟛されるスカラヌ挔算の自動ベクトル化機胜ずは異なり、新しい API では䞊列デヌタ凊理のベクトル化を明瀺的に制埡できたす。
  • 独自の䞭間操䜜の定矩をサポヌトする拡匵ストリヌム 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 の 2 番目のバヌゞョンがテスト甚に提案されおいたす。これは、異なるスレッドで実行される耇数のタスクを 1 ぀のブロックずしお凊理するこずにより、マルチスレッド アプリケヌションの開発を簡玠化したす。
  • 暗黙的に宣蚀されたクラスず「main」メ゜ッドの名前のないむンスタンスの 2 番目の予備実装を远加したした。これにより、public/static 宣蚀が䞍芁になり、匕数の配列やクラス宣蚀に関連付けられたその他の゚ンティティを枡すこずができたす。 // public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // これで void main() { System.out.println("Hello, World!"); }
  • スコヌプ付き倀の 2 番目のプレビュヌ実装を远加したした。これにより、䞍倉デヌタをスレッド間で共有したり、子スレッド間でデヌタを効率的に亀換したりできるようになりたす (倀は継承されたす)。スコヌプ付き倀は、スレッドロヌカル倉数メカニズムを眮き換えるために開発されおおり、非垞に倚数の仮想スレッド (数千たたは数癟䞇のスレッド) を䜿甚する堎合により効率的です。スコヌプ付きの倀ずスレッドロヌカル倉数の䞻な違いは、前者は䞀床曞き蟌たれ、将来倉曎するこずができず、スレッドの実行䞭のみ䜿甚可胜なたたであるこずです。
  • 䞊列ガベヌゞ コレクタヌは、オブゞェクトの倧芏暡な配列を操䜜するずきのパフォヌマンスが向䞊したした。最適化により、オブゞェクトの倧芏暡な配列を䜿甚した䞀郚のテストで、オブゞェクトの怜玢を開始するたでの遅延を 20% 削枛するこずが可胜になりたした。

さらに、グラフィカル むンタヌフェむス JavaFX 22 を䜿甚しおアプリケヌションを䜜成するためのプラットフォヌムのアップデヌトが公開されたこずにも泚目しおください。

出所 オヌプンネット.ru

コメントを远加したす