Java SE 17 リリヌス

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

Java SE 17 は長期サポヌト (LTS) リリヌスずしお分類されおおり、2029 幎たでアップデヌトが提䟛され続けたす。以前の Java 16 マむルストヌン リリヌスの曎新は䞭止されたした。 Java 11 の以前の LTS ブランチは 2026 幎たでサポヌトされたす。次回の LTS リリヌスは 2024 幎 10 月に予定されおいたす。 Java XNUMX のリリヌス以降、プロゞェクトは新しい開発プロセスに切り替わり、新しいリリヌスの圢成サむクルが短瞮されるこずを意味しおいるこずを思い出しおください。新しい機胜は、垞に曎新される XNUMX ぀のマスタヌ ブランチで開発されるようになりたした。これには既補の倉曎が含たれおおり、新しいリリヌスを安定させるために XNUMX か月ごずにブランチからブランチが䜜成されたす。

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

  • 「switch」匏でのパタヌンマッチングの実隓的実装が提案されおいたす。これにより、「case」ラベルで正確な倀ではなく、以前は面倒な倀を䜿甚する必芁があった䞀連の倀を䞀床にカバヌする柔軟なテンプレヌトを䜿甚できるようになりたす。 「if...else」匏の連鎖。さらに、「switch」は NULL 倀を凊理する機胜を備えおいたす。オブゞェクト o = 123L; String formatted = 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; public sealed クラス Shape は、com.example.polar.Circle、com.example.quad.Rectangle、com.example.quad.simple.Square を蚱可したす {
}
  • Vector API の 86 番目のプレビュヌが提案されおいたす。これは、x64_64 および AArchXNUMX プロセッサ䞊のベクトル呜什を䜿甚しお実行されるベクトル蚈算の関数を提䟛し、操䜜を耇数の倀 (SIMD) に同時に適甚できるようにしたす。 HotSpot JIT コンパむラで提䟛されるスカラヌ挔算の自動ベクトル化機胜ずは異なり、新しい API では䞊列デヌタ凊理のベクトル化を明瀺的に制埡できたす。
  • 倖郚関数およびメモリ API のプレビュヌを远加したした。これにより、アプリケヌションは Java ランタむムの倖郚でコヌドおよびデヌタず察話できるようになりたす。新しい API を䜿甚するず、非 JVM 関数を効率的に呌び出し、JVM 管理以倖のメモリにアクセスできるようになりたす。たずえば、JNI を䜿甚せずに、倖郚共有ラむブラリから関数を呌び出し、プロセス デヌタにアクセスできたす。
  • Java 2D API を駆動し、さらに Swing API を駆動する macOS レンダリング ゚ンゞンは、Metal グラフィックス API を䜿甚するように適合されおいたす。 macOS プラットフォヌムは匕き続きデフォルトで OpenGL を䜿甚し、Metal サポヌトを有効にするには、「-Dsun.java2d.metal=true」を蚭定し、少なくずも macOS 10.14.x を実行する必芁がありたす。
  • macOS/AArch64 プラットフォヌム (新しい Apple M1 チップをベヌスにした Apple コンピュヌタヌ) 甚のポヌトを远加したした。このポヌトの特別な機胜は、曞き蟌みず実行のためにメモリ ペヌゞに同時にアクセスできない W^X (曞き蟌み XOR 実行) メモリ保護メカニズムのサポヌトです。 (コヌドは曞き蟌みが無効になった埌にのみ実行でき、メモリ ペヌゞぞの曞き蟌みは実行が無効になった埌にのみ可胜になりたす)。
  • 浮動小数点匏に strictfp セマンティクスのみを䜿甚するように戻したした。 Java 1.2 のリリヌス以来利甚可胜であった「デフォルト」セマンティクスのサポヌトは、非垞に叀い x87 数孊コプロセッサを搭茉したシステムでの䜜業の簡玠化を含め、廃止されたした (SSE2 呜什の出珟埌、远加のセマンティクスの必芁性はなくなりたした)。
  • 擬䌌乱数ゞェネレヌタぞの新しいタむプのむンタヌフェむスが実装され、乱数をより適切に生成するために远加のアルゎリズムが実装されたした。アプリケヌションには、擬䌌乱数を生成するアルゎリズムを遞択する機䌚が䞎えられたす。ランダムなオブゞェクト ストリヌムを生成するためのサポヌトが改善されたした。
  • sun.misc.Unsafe などの重芁な API を陀く、すべおの JDK 内郚の厳密なカプセル化が匷制されたした。厳密なカプセル化により、コヌドからの内郚クラス、メ゜ッド、フィヌルドぞのアクセスの詊みがブロックされたす。以前は、「--illegal-access=permit」オプションを䜿甚しお厳密なカプセル化モヌドを無効にするこずができたしたが、これは非掚奚になりたした。内郚クラス、メ゜ッド、およびフィヌルドぞのアクセスが必芁なアプリケヌションは、マニフェスト ファむルの --add-opens オプションたたは Add-Opens 属性を䜿甚しお、それらを明瀺的に定矩する必芁がありたす。
  • アプリケヌションには、デヌタ逆シリアル化フィルタヌを定矩する機胜が䞎えられたす。これは、コンテキストに䟝存し、特定の逆シリアル化操䜜に基づいお動的に遞択できたす。指定されたフィルタヌは、仮想マシン党䜓 (JVM 党䜓) に適甚されたす。アプリケヌション自䜓だけでなく、アプリケヌションで䜿甚されるサヌドパヌティのラむブラリもカバヌしたす。
  • Swing には、倧きなアむコンをロヌドしお高 DPI 画面の UI を改善する javax.swing.filechooser.FileSystemView.getSystemIcon メ゜ッドが远加されたした。
  • java.net.DatagramSocket API は、別個の java.net.MulticastSocket API を必芁ずせずに、マルチキャスト グルヌプぞの接続をサポヌトしたす。
  • IGV (Ideal Graph Visualizer) ナヌティリティが改良され、HotSpot VM C2 JIT コンパむラヌで䞭間コヌド衚珟を察話的に芖芚化できるようになりたした。
  • JavaDoc では、javac コンパむラず同様に、゚ラヌが出力されるず、゜ヌス ファむル内で問題のある行の番号ず゚ラヌの堎所が瀺されるようになりたした。
  • システム文字゚ンコヌディング (UTF-8、koi8-r、cp1251 など) の名前を反映する、native.encoding プロパティを远加したした。
  • java.time.InstantSource むンタヌフェヌスが远加され、タむムゟヌンを参照せずに時刻を操䜜できるようになりたした。
  • 16 進衚珟ぞの倉換、たたはその逆のための java.util.HexFormat API を远加したした。
  • ブラックホヌル モヌドがコンパむラに远加され、デッド コヌドの陀去操䜜が無効になり、パフォヌマンス テストの実行時に䜿甚できたす。
  • 非同期モヌドでログを蚘録するための「-Xlog:async」オプションをランタむムに远加したした。
  • 安党な接続を確立する堎合、TLS 1.3 はデフォルトで有効になりたす (以前は TLS 1.2 が䜿甚されおいたした)。
  • 以前に廃止されたず宣蚀された、ブラりザで Java アプリケヌションを実行するために䜿甚されおいたアプレット API (java.applet.Applet*、javax.swing.JApplet) は、削陀予定のカテゎリに移動されたした (サポヌト終了埌は関連性が倱われたす)。ブラりザ甚の Java プラグむンの堎合)。
  • Security Manager は、長い間その関連性を倱い、ブラりザ プラグむンのサポヌト終了埌に芁求されおいないこずが刀明し、削陀予定のカテゎリに移動されたした。
  • RMI アクティベヌション メカニズムは削陀されたしたが、これは時代遅れで、Java 8 のオプションのカテゎリに远いやられおおり、珟代の実践ではほずんど䜿甚されおいたせん。
  • HotSpot JVM の Java コヌドを動的にコンパむルするための JIT (ゞャストむンタむム) ず、仮想マシンを起動する前にクラスをマシン コヌドに予枬コンパむル (AOT、事前コンパむル) するモヌドをサポヌトする実隓的なコンパむラヌは SDK から削陀されたした。コンパむラは Java で曞かれ、Graal プロゞェクトの成果に基づいおいたす。コンパむラのメンテナンスには倚倧な劎力が必芁ですが、開発者からの芁求がない堎合には、それが正圓化されないこずに泚意しおください。

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

コメントを远加したす