JDK 23リリースにおける重要な変更
JDK 23の新機能と拡張機能、およびAPI仕様の詳細は、JDK 23リリース・ノートを参照してください。
Java SE 23およびJDK 23の更新内容の一部を次に示します:
言語プレビュー機能
- パターン一致は、すべてのパターン・コンテキストでプリミティブ型のパターンを許可することで拡張されました。
instanceof
とswitch
の演算子、式および文は、すべてのプリミティブ型で機能します。JEP 455: パターン、instanceofおよびswitchのプリミティブ型(プレビュー)に関する項および『Java Platform, Standard Edition Java言語更新』の次の項を参照してください:
- モジュール・インポート宣言では、モジュールによってエクスポートされたすべてのパッケージをモジュール・インポート宣言で簡潔にインポートできます。これにより、インポートされたコードをモジュール内に配置する必要なく、モジュラ・ライブラリの再利用が容易になります。
JEP 476: モジュール・インポート宣言(プレビュー)に関する項および『Java Platform, Standard Edition Java言語更新』の「モジュール・インポート宣言」を参照してください。
- 柔軟なコンストラクタ本体では、明示的なコンストラクタ呼出しの前に、作成されるインスタンスを参照しない文を追加できます。この機能によって、自明でない計算を実行することでスーパークラス・コンストラクタの引数を準備したり、スーパークラス・コンストラクタに渡す引数を検証したりできます。
JEP 482: 柔軟なコンストラクタ本体(第2プレビュー)に関する項および『Java Platform, Standard Edition Java言語更新』の「柔軟なコンストラクタ本体」を参照してください。
- 暗黙的に宣言されたクラスおよびインスタンスのmainメソッドにより、受講者は大規模なプログラム用に設計されたすべての言語機能を学習しなくても、最初のプログラムを作成できます。受講者は単一クラス・プログラムの合理化された宣言を記述し、スキルの向上に合せてより高度な機能を使用するようにプログラムをシームレスに拡張できます。
JEP 477: 暗黙的に宣言されたクラスおよびインスタンスのmainメソッド(第3プレビュー)に関する項および『Java Platform, Standard Edition Java言語更新』の「暗黙的に宣言されたクラスおよびインスタンスのmainメソッド」を参照してください。
- 文字列テンプレートは、JDK 21 (JEP 430)およびJDK 22 (JEP 459)で最初にプレビューされました。文字列テンプレートは、JDK 23 (JEP 465)で再度プレビューされる予定でした。しかし、広範なフィードバックと議論の後、この機能は現在の形では不適切であるという結論が下されました。より適切な設計がどのようなものになるのか一致した見解はありません。したがって、この機能はひとまず取り下げられており、JDK 23には含まれません。
詳細は、Project Amber amber-spec-expertsメーリング・リストの2024年3月のスレッド別アーカイブおよび文字列テンプレートの更新(JEP 459)を参照してください。
JEP 12: プレビュー機能に関する項および『Java Platform, Standard Edition Java言語更新』のプレビュー言語およびVM機能に関する項を参照してください。
ライブラリ改善プレビューおよびインキュベーター
- クラス・ファイルAPIは、Javaクラス・ファイルの解析、生成および変換に使用されます。
JEP 466: クラス・ファイルAPI (第2プレビュー)に関する項および『Java Platform, Standard Edition Java仮想マシン・ガイド』の「クラス・ファイルAPI」を参照してください。
- Stream Gatherersを使用すると、カスタムの中間操作を作成できます。これにより、ストリーム・パイプラインは、既存の組込み中間操作では困難だった方法でデータを変換できるようになります。
JEP 473: Stream Gatherers (第2プレビュー)に関する項および『Java Platform, Standard Editionコア・ライブラリ』の「Stream Gatherers」を参照してください。
- 構造化並行性は、異なるスレッドで実行されている複数のタスクを1つの作業単位として処理することにより、エラーの処理と取消しを合理化し、信頼性と可観測性を向上させます。
JEP 480: 構造化並行性(第3プレビュー)に関する項および『Java Platform, Standard Editionコア・ライブラリ』の構造化並行性に関する項を参照してください。
- スコープ値を使用すると、スレッド内およびスレッド間で不変データを共有できます。多数の仮想スレッドを使用する場合は特に、スレッド・ローカル変数よりもこちらをお薦めします。
JEP 481: スコープ値(第3プレビュー)に関する項およびJava API仕様の
ScopedValue
クラスに関する項を参照してください。 - 実行時に、サポートされているCPUアーキテクチャ上で最適なベクトル命令に確実にコンパイルするベクトル計算を表現するために、Vector APIが導入されています。これにより、同等のスカラー計算よりも優れたパフォーマンスを実現できます。JEP 469: ベクターAPI (第8インキュベータ)に関する項を参照してください。
JEP 11: インキュベータ・モジュールに関する項を参照してください。
実行時の改善点
- ZGCガベージ・コレクタは、デフォルトで世代別モードで実行されるようになりました。非世代別モードのZGCは、削除のために非推奨となりました。これにより、通常はアプリケーションのパフォーマンスが向上しますが、本質的に非世代別であるワークロードの数が少ないと、マイナスの影響を受ける可能性があります。
JEP 474: ZGC: デフォルトの世代別モードに関する項および『Java Platform, Standard Edition HotSpot仮想マシン・ガベージ・コレクション・チューニング・ガイド』の「Zガベージ・コレクタ」を参照してください。
- Oracle GraalVM JITコンパイラ(Graal JIT)がOracle JDKの一部として使用可能なJITに含まれるようになりました。この統合によって、新しいJITコードの最適化方法(GraalVMドキュメントのコンパイラの利点に関する項を参照)など、Oracle GraalVMを介して以前に使用可能になったイノベーションが提供されます。これにより、開発者およびシステム管理者に、アプリケーションのピーク・パフォーマンスを微調整および改善するのに役立つより多くのオプションが提供されます。Graal JITは、コマンドライン・オプションをJava実行可能ファイルに渡すことで有効化されます:
-XX:+UnlockExperimentalVMOptions -XX:+UseGraalJIT
JVMの起動時にこれらのフラグを渡さない場合、Oracle JDKのデフォルトのJIT (C2)は通常どおり実行されます。
ツール
JavaDocドキュメントのコメントは、HTML要素およびJavaDocタグとともにMarkdown構文で記述できるようになりました。
JEP 467: Markdownドキュメント・コメントに関する項および『Java Platform, Standard Edition JavaDocガイド』の「ドキュメント・コメントのMarkdown」を参照してください。
削除されたAPI、ツールおよびコンポーネント
削除および非推奨の詳細は、「JDK 23で削除および非推奨となった機能およびオプション」を参照してください。
また、注意が必要なセキュリティ関連の更新もあります。「JDK 23でのセキュリティ・アップデート」を参照してください。