2025年5月12日の週、OpenJDKエコシステムでは活発な動きが見られた。注目すべきは、2つのJEPがProposed to TargetからTargetedに昇格し、4つのJEPがCandidateからProposed to Targetに昇格したことである。また、1つのJEPがJEP DraftからCandidateステータスに昇格した。これらのうち2つは、それぞれのプレビューラウンドを経て最終化される予定である。
JDK 25に向けてターゲット化されたJEPs
2つのJEPがProposed to Targetから、JDK 25に向けて正式にTargetedに昇格した。
JEP 510キー導出関数APIは、JDK 24で提供されたプレビュー版であるJEP 478キー導出関数API(プレビュー)を経て、変更なしでこの機能を最終化することを提案している。本JEPはここで発表された。この機能は、秘密鍵やその他のデータから追加の鍵を導出するための暗号アルゴリズムであるキー導出関数(KDF)のAPIを導入するものである。これにより、セキュリティプロバイダーがKDFアルゴリズムをJavaまたはネイティブコードで実装できるようにし、JEP 452鍵カプセル化メカニズムの実装においてKDFを使用できるようにすることを目指している。
JEP 506スコープ付き値は、JDK 24で提供されたJEP 487スコープ付き値(第4プレビュー)、JDK 23で提供されたJEP 481スコープ付き値(第3プレビュー)、JDK 22で提供されたJEP 464スコープ付き値(第2プレビュー)、JDK 21で提供されたJEP 446スコープ付き値(プレビュー)、およびJDK 20で提供されたJEP 429スコープ付き値(インキュベーター)の4回のプレビューを経て、変更なしでこの機能を最終化することを提案している。本JEPはここで発表された。以前はExtent-Local Variables(インキュベーター)として知られていたこの機能は、不変データをスレッド内およびスレッド間で共有することを可能にする。特に大量の仮想スレッドを使用する場合、スレッドローカル変数よりも優れている。
JDK 25に向けてProposed to Targetに昇格したJEPs
4つのJEPがJDK 25に向けてCandidateからProposed to Targetに昇格した。
JEP 519コンパクトオブジェクトヘッダーは、JEP Draft 8354672からCandidateへ、そしてProposed to Targetへと昇格し、JDK 25に向けてターゲット化された(それぞれここおよびここで発表された)。このJEPは、この機能を実験的なものから製品として昇格させることを提案している。Project Lilliputに触発されたこの機能は、「64ビットアーキテクチャにおいて、HotSpot JVMのオブジェクトヘッダーのサイズを96ビットから128ビットの間から64ビットに削減する」ものである。JEP 450の詳細については、InfoQのニュース記事で確認できる。
JEP 515事前実行型メソッドプロファイリングは、ここで発表され、アプリケーションのウォームアップ時間を改善することを提案している。この機能は、「HotSpot JVMが起動する際に、アプリケーションの前回の実行から得られたメソッド実行プロファイルを即座に利用可能にする」ことで実現される。これにより、JITコンパイラはプロファイルの収集を待つことなく、アプリケーションの起動時に即座にネイティブコードを生成することが可能になる。
JEP 514、Ahead-of-Time Command-Line Ergonomicsがここで発表された。この提案は、JEP 483、Ahead-of-Time Class Loading & Linkingで説明されているように、Javaアプリケーションの起動を「一般的な使用ケースに必要なコマンドを簡素化すること」によって加速するためのAhead-of-Timeキャッシュの作成プロセスを簡素化することが目的だ。
JEP 507Primitive Types in Patterns, instanceof, and switch (Third Preview)がここで発表された。この提案は、変更を加えずに3回目のプレビューを実施し、これまでの2回のプレビューから得られた経験とフィードバックをさらに収集することを目的としている。これまでのプレビューには、JDK 24で提供されたJEP 488Primitive Types in Patterns, instanceof, and switch (Second Preview)およびJDK 23で提供されたJEP 455Primitive Types in Patterns, instanceof, and switch (Preview)が含まれる。この機能はProject Amberのもとで開発されており、すべてのパターンコンテキストでプリミティブ型のパターンを使用可能にすることでパターンマッチングを強化し、instanceofおよびswitchがすべてのプリミティブ型に対応できるよう拡張するものである。詳細については、OracleのテクニカルスタッフであるAggelos Biboudis氏によるこの仕様書の草案で確認できる。
それぞれのレビューは、2025年5月22日までに終了する予定である。
新しいJEP候補
EP 520JFR Method Timing & Tracingが、JEP Draft 8328610から候補ステータスに昇格した。このJEPは、JDK Flight Recorderを拡張し、バイトコードインストルメンテーションインターフェースを通じてメソッドのタイミングとトレースをする機能を提供することを提案している。
JDK 25の機能セットとリリーススケジュール
OracleのJavaプラットフォームグループのチーフアーキテクトであるMark Reinhold氏によって承認されたJDK 25のリリーススケジュールは以下の通り:
- ランプダウンフェーズ1(メインラインからのフォーク):2025年6月5日
- ランプダウンフェーズ2:2025年7月17日
- 初期リリース候補:2025年8月7日
- 最終リリース候補:2025年8月21日
- 一般提供開始:2025年9月16日
JDK 25の機能セットが確定する予定のRampdown Phase Oneまで残り3週間を切った現在、これまでに機能セットに含まれているJEPは以下の13件である。
- JEP 502: 安定した値(プレビュー)
- JEP 503: 32ビットx86ポートの削除
- JEP 505: 構造化された並行処理(第5プレビュー)
- JEP 506: スコープ付き値
- JEP 507: パターン、instanceof、およびswitchにおけるプリミティブ型(第3プレビュー)
- JEP 508: ベクターAPI(第10インキュベーター)
- JEP 510: キー導出関数API
- JEP 511: モジュールインポート宣言
- JEP 512: コンパクトなソースファイルとインスタンスメインメソッド
- JEP 513: 柔軟なコンストラクターボディ
- JEP 514: アヘッドオブタイムコマンドラインエルゴノミクス
- JEP 515: アヘッドオブタイムメソッドプロファイリング
- JEP 519: コンパクトなオブジェクトヘッダー
JDK 25は、JDK 21、JDK 17、JDK 11、そしてJDK 8に続く次の長期サポート(LTS)リリースとして指定されている。