JDK 25リリースにおける重要な変更

JDK 25の新機能と拡張機能、およびAPI仕様の詳細は、JDK 25リリース・ノートを参照してください。

Java SE 25およびJDK 25の更新内容の一部を次に示します:

言語プレビュー機能

  • パターン・マッチングが拡張され、すべてのパターン・コンテキストでプリミティブ型を使用できるようになりました。instanceof演算子とswitch式および文は、すべてのプリミティブ型で機能するように拡張されています。

    この機能はJava SE 23で初めてプレビューされ、今回のリリースで再プレビューされました。Java SE 23およびこのリリースの間には重要な変更はありません。

    JEP 507: パターン、instanceofおよびswitchのプリミティブ型(第3プレビュー)および『Java Platform, Standard Edition Java言語更新』の次の項を参照してください:

  • モジュール・インポート宣言では、モジュールによってエクスポートされたすべてのパッケージを簡潔にインポートできます。これにより、インポート・コードをモジュール自体に含める必要がなく、モジュラ・ライブラリの再利用が容易になります。

    この機能はJava SE 23で初めてプレビューされ、今回のリリースで再プレビューされました。Java SE 23およびこのリリースの間には重要な変更はありません。

    JEP 511: モジュール・インポート宣言に関する項および『Java Platform, Standard Edition Java言語更新』「モジュール・インポート宣言」を参照してください。

  • コンパクト・ソース・ファイルおよびインスタンスのmainメソッドを使用すると、受講者は大規模なプログラム用に設計されたすべての言語機能を理解しなくても、最初のプログラムを作成できます。
    Java SE 21で最初にJEP 445: 無名クラスおよびインスタンスのmainメソッド(プレビュー)としてプレビューされ、Java SE 22、23および24で再度プレビューされたこの機能は改訂されたタイトルでこのリリースで永続的になりました。このリリースでは:
    • 基本的なコンソールI/Oの新しいIOクラスは、java.ioパッケージではなくjava.langパッケージ内にあります。したがって、すべてのソース・ファイルによって暗黙的にインポートされます。
    • IOクラスのstaticメソッドは、コンパクト・ソース・ファイルに暗黙的にインポートされなくなります。したがって、これらのメソッドの呼出しでは、メソッドが明示的にインポートされないかぎり、クラスにIO.println("Hello, world!")などの名前を付ける必要があります。
    • IOクラスの実装は、 java.io.Consoleクラスではなく、System.outおよびSystem.inに基づきます。

    JEP 512: コンパクト・ソース・ファイルおよびインスタンスのMainメソッドおよび『Java Platform, Standard Edition Java言語更新』コンパクト・ソース・ファイルおよびインスタンスのmainメソッドに関する項を参照してください。

  • 柔軟なコンストラクタ本体を使用すると、コンストラクタ内の文を、super(..)this(..)などの明示的なコンストラクタ呼出しの前に指定できます。これらの文は作成中のインスタンスを参照できませんが、フィールドを初期化できます。別のコンストラクタを呼び出す前にフィールドを初期化することで、メソッドがオーバーライドされた場合でもクラスの信頼性が向上します。

    Java SE 22で最初にJEP 447: super(...)の前の文(プレビュー)としてプレビューされ、Java SE 23およびJava SE 24で再度プレビューされたこの機能は、大きな変更なくこのリリースで永続的になりました。

    JEP 513: 柔軟なコンストラクタ本体および『Java Platform, Standard Edition Java言語更新』柔軟なコンストラクタ本体に関する項を参照してください。

JEP 12: プレビュー機能に関する項および『Java Platform, Standard Edition Java言語更新』プレビュー言語およびVM機能に関する項を参照してください。

ライブラリの改善、プレビュー、およびインキュベータ

  • 構造化並行性は、並行プログラミングを簡素化するAPIです。異なるスレッドで実行されている関連タスクのグループを1つの作業単位として処理することにより、エラーの処理と取消しを効率化し、信頼性と可観測性を向上させます。

    JEP 505: 構造化並行性(第5プレビュー)および『Java Platform, Standard Editionコア・ライブラリ』構造化並行性に関する項を参照してください。

  • スコープ値を使用すると、メソッドで不変データをスレッド内のそのコール先と子スレッドの両方と共有できます。スレッドローカル変数よりも扱いやすいです。また、特に仮想スレッドおよび構造化並行性とともに使用する場合、領域および時間のコストも低くなります。

    JEP 506: スコープ値およびJava API仕様のScopedValueクラスを参照してください。

  • 安定値APIは不変データを保持します。これらはJVMによって定数として扱われ、フィールドfinalを宣言することによって有効化されるものと同じパフォーマンス最適化を可能にします。finalフィールドと比較して、安定値により、初期化のタイミングに関する柔軟性が向上します。

    JEP 502: 安定値(プレビュー)、Java API仕様のStableValue、および『Java Platform, Standard Editionコア・ライブラリ』安定値に関する項を参照してください。

  • ベクターAPIは、実行時に、サポートされているCPUアーキテクチャ上で最適なベクトル命令に確実にコンパイルするベクトル計算を表現します。これにより、同等のスカラー計算よりも優れたパフォーマンスを実現できます。

    JEP 508: ベクターAPI (第10インキュベータ)およびJEP 11: インキュベータ・モジュールを参照してください。

セキュリティ・ライブラリ
  • 暗号化キー、証明書、および証明書失効リストを表すオブジェクトを広く使用されているプライバシ拡張メール(PEM)トランスポート・フォーマットにエンコードし、そのフォーマットから元のオブジェクトにデコードするためのAPIが導入されました。

    JEP 470: 暗号化オブジェクトのPEMエンコーディング(プレビュー)および『Java Platform, Standard Editionセキュリティ開発者ガイド』DEREncodableインタフェースに関する項を参照してください。

  • キー導出関数(KDF)にAPIが導入されました。KDFは、秘密キーやその他のデータから追加のキーを導出するための暗号化アルゴリズムです。

    JEP 510: キー導出関数APIおよび『Java Platform, Standard Editionセキュリティ開発者ガイド』KDFクラスに関する項を参照してください。

パフォーマンスとランタイムの改善

  • HotSpot JVMのオブジェクト・ヘッダーのサイズは、64ビット・アーキテクチャで96ビットと128ビットから64ビットに削減されました。これにより、ヒープ・サイズが削減され、デプロイメントの密度が向上し、データの局所性が向上します。この試験的な機能が製品機能に変更されました。

    JEP 519: コンパクト・オブジェクト・ヘッダーを参照してください。

  • 事前(AOT)コマンドライン・エルゴノミクスは、一般的なユース・ケースに必要なコマンドの複雑さを軽減することで、事前(AOT)キャッシュの作成プロセスを簡素化します。AOTキャッシュは、Javaアプリケーションの起動を高速化し、より効率的で応答性の高いものにします。

    JEP 483: 事前クラス・ローディングおよびリンクで最初に導入されたこの拡張機能により、新しいAOT関連の最適化がHotSpot JVMにもたらされます。

    JEP 514: 事前コマンドライン・エルゴノミクスを参照してください。

  • 事前メソッド・プロファイリングは、HotSpot Java仮想マシンの起動時に、アプリケーションの以前の実行からのメソッド実行プロファイルを即時に使用可能にすることで、起動時間を改善します。これにより、JITコンパイラは、アプリケーションの起動時にネイティブ・コードを生成できるため、現在の実行中にプロファイル・データが収集されるのを待機する必要がなくなります。

    JEP 515: 事前メソッド・プロファイリングを参照してください。

モニタリング

  • JFR CPU時間プロファイリング : JDK Flight Recorder (JFR)は、Linuxでより正確なCPU時間プロファイリング・データを収集するように拡張されました。現在、この機能は試験段階です。

    JEP 509: JFR CPU時間プロファイリング(試験段階)およびJDK Flight Recorderを参照してください。

  • JFR協調サンプリング: JDK Flight Recorder (JFR)の安定性は、コール・スタックの探索をセーフポイントに制限することでJavaスレッド・スタックを非同期にサンプリングし、セーフポイント・バイアスを削減することで強化されました。

    JEP 518: JFR協調サンプリングを参照してください。

  • JFRメソッド・タイミングおよびトレース: バイトコード・インストゥルメンテーションを使用したメソッド・タイミングおよびトレースをサポートするように、JDK Flight Recorder (JFR)が拡張されました。タイミングおよびトレース・メソッドの起動は、パフォーマンスのボトルネックの特定、コードの最適化、およびバグの根本原因の特定に役立ちます。

    JEP 520: JFRメソッド・タイミングおよびトレースを参照してください。

削除および将来の変更に関する警告

試験的な機能Graal JITの削除: オプションの試験的なGraal JITコンパイラが削除されました。

削除および非推奨の詳細は、「JDK 25で削除および非推奨となった機能およびオプション」を参照してください。

また、注意が必要なセキュリティ関連の更新もあります。「JDK 25でのセキュリティ・アップデート」を参照してください。