Oracleは6ヶ月の開発期間を経て、オープンソースのOpenJDKプロジェクトをリファレンス実装として採用したJava SE 27(Java Platform, Standard Edition 27)をリリースしました。一部の非推奨機能の削除を除き、Java SE 27はJavaプラットフォームの以前のリリースとの下位互換性を維持しており、以前に作成されたほとんどのJavaプロジェクトは新しいバージョンで実行しても変更なく動作します。Java SE 27(JDK、JRE、およびServer JRE)のインストール準備済みビルドは、 Linux (x86_64、AArch64) Windows (x86_64) および macOS (x86_64、AArch64)。OpenJDKプロジェクトによって開発されたJava SE 27リファレンス実装は、GPLv2ライセンスの下で完全にオープンソースであり、商用製品との動的リンクを可能にするGNU ClassPath例外を備えています。
Java SE 27 は通常のサポートリリースに分類され、次のリリースまでアップデートが提供されます。長期サポート (LTS) ブランチは Java SE 25、Java SE 21、または Java SE 17 であり、それぞれ 2033 年、2031 年、2029 年までアップデートが提供されます (一般的には 2030 年 9 月、2028 年、2026 年まで利用可能です)。Java SE 8 LTS ブランチの拡張サポートは 2030 年まで、Java SE 11 の拡張サポートは 2032 年まで継続されます。
Java SE 27 (1, 2, 3, 4) の変更点は以下のとおりです。
- デフォルトでは、すべての環境で、以前はサーバーシステムで使用されていたG1(Garbage-First)ガベージコレクタが使用されます。G1は、大容量メモリを搭載したマルチプロセッサシステムでの使用と、予測可能なレイテンシと高いスループットのバランスを取ることに最適化されています。G1は動作中にメモリを多数の小さな領域に分割し、未使用オブジェクトが多く、アクティブにアクセスされるデータが少ない領域を優先します。
- HotSpot JVMはデフォルトでコンパクトオブジェクトヘッダーを使用します。64ビットシステムでは、ヘッダーサイズが96ビットから64ビットに縮小され、メモリ消費量が削減され、データがプロセッサキャッシュにヒットする可能性が高まりました。SPECjbb2015ベンチマークでは、メモリ消費量が22%、CPU負荷が8%、ガベージコレクション操作の回数が15%減少しました。JSONパーサーのテスト実行時間も10%短縮されました。
- TLS 1.3 の実装では、量子耐性 ML-KEM (CRYSTALS-Kyber) アルゴリズムと従来の ECDHE 楕円曲線アルゴリズムを組み合わせたハイブリッド鍵合意スキームのサポートが追加されました。具体的には、X25519MLKEM768 (X25519 曲線を使用した ECDHE + ML-KEM-768)、SecP256r1MLKEM76 (secp256r1 曲線を使用した ECDHE + ML-KEM-768)、SecP384r1MLKEM1024 (secp384r1 曲線を使用した ECDHE + ML-KEM-1024) です。これは javax.net API で利用できます。SSL これらのスキームはデフォルトで有効になっており、使用するためにアプリケーションを変更する必要はありません。
- パフォーマンス監視、プロファイリング、診断に使用されるツールであるJDK Flight Recorder(JFR)は、保存される診断情報において、コマンドライン引数、環境変数の初期値、およびシステムプロパティをサニタイズする機能をサポートするようになりました。この変更により、環境変数を介して渡される認証トークンやAPIアクセスキーなど、プロファイル対象プロセスによって処理される機密データの漏洩を防ぐことができます。
- Lazy Constants API の 3 番目のプレビューが実装され、JVM で定数として扱われる不変データを含むオブジェクトを操作できるようになりました。このようなオブジェクトには、「final」キーワードを持つフィールドと同様のパフォーマンス最適化が適用されます。「final」とは異なり、新しい API は定数値の作成と初期化を分離し、値が一度だけ初期化されることを保証し、プログラムの起動時間を短縮し、これまで JDK 内部コードでのみ使用されていた定数畳み込み最適化をユーザーコードで使用できるようにします。 class Application { // 以前: // static final UserService USERS = new UserService(); // 現在: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- パターンマッチングエンジンは、あらゆる種類のパターン、instanceof演算子、およびswitchブロックでプリミティブ型(int、byte、char、およびその他の非オブジェクト基本型)を使用する機能の第5ドラフトを導入します。 switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
- 複数のスレッドで実行されるタスクを単一の単位として扱うことでマルチスレッドアプリケーションの開発を簡素化する、構造化並行処理APIの第7版がテスト用に公開されました。
- Vector APIの12番目のテスト実装が実装されました。このAPIは、x86_64およびAArch64プロセッサのベクトル命令を使用して実行されるベクトル計算のための関数を提供し、複数の値に対する同時演算(SIMD)を可能にします。HotSpot JITコンパイラのスカラー演算の自動ベクトル化とは異なり、この新しいAPIでは、並列データ処理のためのベクトル化を明示的に制御できます。
- 暗号鍵、証明書、および証明書失効リストを含むオブジェクトをPEM(プライバシー強化メール)形式でエンコードおよびデコードするためのAPIの第3版が利用可能になりました。
さらに、グラフィカルユーザーインターフェースアプリケーションを作成するためのJavaFX 27プラットフォームのアップデート版をリリースしたことをお知らせいたします。JavaScript(Node.js)、Python、Ruby、R、あらゆるJVM言語(Java、Scala、Clojure、Kotlin)、およびLLVMビットコードを生成できる言語(C、C++、Rust)でのアプリケーション実行をサポートする汎用仮想マシンGraalVM 27も、数時間以内にリリースされる予定です。
出所: オープンネット.ru
