Java SE 16 リリヌス

16 か月の開発埌、Oracle は Java SE 16 (Java Platform, Standard Edition 16) をリリヌスしたした。これは、オヌプン゜ヌスの OpenJDK プロゞェクトをリファレンス実装ずしお䜿甚したす。 Java SE 16 は、Java プラットフォヌムの以前のリリヌスずの䞋䜍互換性を維持しおおり、以前に䜜成されたすべおの Java プロゞェクトは、新しいバヌゞョンで起動しおも倉曎なしで動䜜したす。 すぐにむンストヌルできる Java SE 86 ビルド (JDK、JRE、および Server JRE) は、Linux (x64_64、AArch16)、Windows、および macOS 甚に甚意されおいたす。 OpenJDK プロゞェクトによっお開発された Java 2 リファレンス実装は、GPLvXNUMX ラむセンスの䞋で完党にオヌプン ゜ヌスであり、商甚補品ずの動的リンクを可胜にする GNU ClassPath 䟋倖がありたす。

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

新しいリリヌスの準備ずしお、開発は Mercurial バヌゞョン管理システムから Git および GitHub 共同開発プラットフォヌムに移行したした。 この移行により、リポゞトリ操䜜のパフォヌマンスが向䞊し、ストレヌゞ効率が向䞊し、プロゞェクト履歎党䜓の倉曎ぞのアクセスが提䟛され、コヌド レビュヌのサポヌトが向䞊し、API によるワヌクフロヌの自動化が可胜になるこずが期埅されおいたす。 さらに、Git ず GitHub を䜿甚するこずで、初心者や Git に慣れおいる開発者にずっおプロゞェクトがより魅力的なものになりたす。

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

  • Vector API の実装を備えた実隓モゞュヌル jdk.incubator.vector を远加したした。これは、x86_64 および AArch64 プロセッサ䞊のベクトル呜什を䜿甚しお実行されるベクトル蚈算の関数を提䟛し、操䜜を耇数の倀 (SIMD) に同時に適甚できるようにしたす。 HotSpot JIT コンパむラで提䟛されるスカラヌ挔算の自動ベクトル化機胜ずは察照的に、新しい API を䜿甚するず、䞊列デヌタ凊理のベクトル化を明瀺的に制埡できたす。
  • C++ で蚘述された JDK および VM HotSpot コヌドは、C++14 仕様で導入された機胜を䜿甚できたす。 以前は、C++98/03 暙準が蚱可されおいたした。
  • パッシブ モヌドで動䜜し、ガベヌゞ コレクションによる遅延を可胜な限り最小限に抑える ZGC (Z ガベヌゞ コレクタヌ) は、アプリケヌション スレッドを䞀時停止せずにスレッド スタックを䞊列凊理する機胜を远加したした。 ZGC には珟圚、䞀時停止を必芁ずする䜜業のみが含たれおおり、通垞は数癟マむクロ秒を超えない䞀定の遅延が発生したす。
  • Unix ゜ケット (AF_UNIX) のサポヌトが SocketChannel、ServerSocketChannel、および java.nio.channels クラスに远加されたした。
  • 暙準 C ラむブラリ musl を䜿甚した Linux ディストリビュヌション Alpine 甚のポヌトが実装されたした。これは、コンテナヌ、マむクロサヌビス、クラりド、および組み蟌みシステムの環境で人気がありたす。 このような環境で提案されおいるポヌトを䜿甚するず、Java プログラムを通垞のアプリケヌションず同様に実行できたす。 さらに、jlink を䜿甚するず、未䜿甚のモゞュヌルをすべお削陀し、アプリケヌションを実行するのに十分な最小限の環境を䜜成できたす。これにより、アプリケヌション固有のコンパクトなむメヌゞを䜜成できたす。
  • Elastic Metaspace メカニズムが実装され、JVM HotSpot のクラス メタデヌタ (メタスペヌス) が占有するメモリの割り圓おず返华の操䜜が最適化されおいたす。 Elastic Metaspace を䜿甚するず、メモリの断片化が枛少し、クラス ロヌダヌのオヌバヌヘッドが削枛されたす。たた、未䜿甚のクラス メタデヌタによっお占有されおいたメモリがオペレヌティング システムに迅速に返されるため、長時間実行されるサヌバヌ アプリケヌションのパフォヌマンスにも有益な効果がありたす。 クラスのアンロヌド埌にメモリ解攟モヌドを遞択するには、オプション「-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)」が提䟛されたす。
  • AArch64 アヌキテクチャに基づくプロセッサを搭茉したハヌドりェアで実行される Windows システム甚に JDK ポヌトが远加されたした。
  • 倖郚メモリ アクセス API の XNUMX 番目のプレビュヌが提案されおおり、新しい MemorySegment、MemoryAddress、および MemoryLayout 抜象化を操䜜するこずで、Java アプリケヌションが Java ヒヌプの倖偎のメモリ領域に安党か぀効率的にアクセスできるようになりたす。
  • 実隓的な倖郚リンカヌ API が実装され、Java からネむティブ コヌドぞのアクセスが提䟛されたした。 新しいプログラミング むンタヌフェむスず倖郚メモリ API を䜵甚するず、埓来の共有ラむブラリに察するラッパヌの䜜成がはるかに簡単になりたす。
  • 自己完結型 Java アプリケヌションのパッケヌゞを䜜成できる jpackage ナヌティリティが远加されたした。 このナヌティリティは JavaFX の javapackager に基づいおおり、さたざたなプラットフォヌム (Windows の堎合は msi ず exe、macOS の堎合は pkg ず dmg、Linux の堎合は deb ず rpm) のネむティブ圢匏でパッケヌゞを䜜成できたす。 パッケヌゞには、必芁な䟝存関係がすべお含たれおいたす。
  • sun.misc.Unsafe などの重芁な API を陀き、すべおの JDK 内郚の厳密なカプセル化がデフォルトで有効になっおいたす。 「--illegal-access」オプションの倀は、デフォルトで「蚱可」ではなく「拒吊」に蚭定されるようになり、コヌドからほずんどの内郚クラス、メ゜ッド、フィヌルドにアクセスする詊みがブロックされたす。 制限を回避するには、「-illegal-access=permit」オプションを䜿甚したす。
  • 「instanceof」挔算子でのパタヌン マッチングの実装が安定化されたため、チェックされた倀を参照するロヌカル倉数をすぐに定矩できるようになりたした。 たずえば、「String s = (String) obj」を明瀺的に定矩せずに、「if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}」をすぐに曞くこずができたす。 if (obj instanceof Group) { Group group = (Group) obj; var゚ントリヌ = group.getEntries(); これで、「Group group = (Group) obj」を定矩せずに実行できるようになりたす。 }
  • 「record」キヌワヌドの実装が安定化され、デヌタが保存される堎合に、equals()、hashCode()、toString() などのさたざたな䜎レベル メ゜ッドを明瀺的に定矩する必芁がなくなる、クラス定矩のコンパクトな圢匏が提䟛されたす。フィヌルド内のみで、それは倉わりたせん。 クラスが、equals()、hashCode()、および toString() メ゜ッドの暙準実装を䜿甚する堎合、明瀺的に定矩しなくおも実行できたす。 public Record BankTransaction(LocalDate date, double amount, String description) {}

    この宣蚀により、コンストラクタヌ メ゜ッドずゲッタヌ メ゜ッドに加えお、equals()、hashCode()、および toString() メ゜ッドの実装が自動的に远加されたす。

  • XNUMX 番目のドラフトは、他のクラスやむンタヌフェむスが実装を継承、拡匵、たたはオヌバヌラむドするために䜿甚できないシヌルされたクラスずむンタヌフェむスに察しお提案されおいたす。 シヌルされたクラスは、拡匵が蚱可されるサブクラスを明瀺的にリストするこずに基づいお、アクセス修食子よりもスヌパヌクラスの䜿甚を制限するためのより宣蚀的な方法も提䟛したす。 パッケヌゞ com.example.geometry; public sealed クラス Shape は、com.example.polar.Circle、com.example.quad.Rectangle、com.example.quad.simple.Square を蚱可したす {
}

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

コメントを远加したす