標準的なJavaの長期サポートリリースであるJava Development Kit (JDK) 21は9月に予定されており、シーケンシャルコレクション、仮想スレッド、文字列テンプレート、外部関数とメモリAPI(プレビュー版)が含まれる予定です。これらの機能は、高スループットの同時実行アプリケーションの作成から保守・監視に至るまで、開発者の経験を向上させるように設定されています。
JDK 21のリリースページにはまだ正式に記載されていませんが、外国関数とメモリAPIのプレビューは最近追加されたものと思われます。このAPIは、JavaプログラムがJavaランタイムを超えたコードやデータとスムーズに相互運用することを可能にする。外来関数との効率的な通信や外来メモリへの安全なアクセスを可能にし、Java Native Interface(JNI)がもたらす脆弱性やリスクなしに、Javaプログラムがネイティブライブラリと対話し、ネイティブデータを処理する力を与える。
この外部関数およびメモリAPIは、昨年3月にリリースされたJDK 20および9月にリリースされたJDK 19でプレビューされたことがあります。今回のプレビューでは、レイアウトパスの改善、Arenaインターフェイスでのネイティブセグメントの寿命の一元管理、フォールバックネイティブリンカーの実装、VaListの削除などの機能強化が行われています。このAPIの目標は、使いやすさ、パフォーマンス、汎用性、安全性です。ただし、JNIを置き換えたり、JNIを変更したりすることを目的としていません。
これは軽量なスレッドで、高スループットの並行アプリケーションを作成、維持、観察する際の課題を劇的に軽減することが期待されています。この機能の背景には、サーバー・アプリケーションを最適なハードウェア利用で効果的に拡張できるようにすること、既存のlang.Thread APIコードに最小限の変更を加えて仮想スレッドの採用を促進すること、現在のJDKツールで仮想スレッドのデバッグとプロファイリングを簡素化すること、などの目的があります。JDK 21では、仮想スレッドでスレッドローカル変数を完全にサポートし、既存のライブラリとの互換性を高め、タスクベースのコードが仮想スレッドを使用するように移行するのを支援することを保証します。
シーケンス・コレクションは、JDK 21に付随するもう一つの機能セットです。これらのインターフェースは、各コレクションが明確に定義された第1および第2の要素を持つなど、明確な遭遇順序を持つコレクションを表現することを可能にします。最初と最後の要素にアクセスし、要素の処理順序を逆転させることを容易にする統一されたAPIが提供されます。コレクション、セット、マップのシーケンスインターフェースを定義することで、Javaのコレクションフレームワークのギャップを埋め、長年のユーザーの要望を満たすことを目的としています。
文字列テンプレートは、JDK21のプレビュー機能として登場し、Javaの既存の文字列リテラルとテキストブロックを強化し、リテラルテキストを埋め込み式やプロセッサと融合させて特殊な結果を生成する。この機能の主な目的は、実行時に計算された値を含む文字列を簡単に表現できるようにすることで、Javaプログラミングを簡素化することです。文字列テンプレートは、式の可読性を向上させ、プログラムの安全性を高め、柔軟性を維持し、Java以外の言語で書かれた文字列を受け入れるAPIとの連携を容易にするように設計されています。
JDK 21のリリース計画案では、6月8日と7月20日のランプダウンの後、機能リストは凍結され、その間、バグフィックスが継続されます。その後、8月10日と8月24日に初期リリース候補と最終リリース候補が発表され、バグフィックスが行われる可能性があります。一般提供は9月19日の予定です。
JDK 21は長期サポート(LTS)リリースとなり、5年間のプレミアサポートと2031年9月までの延長サポートが提供される予定です。現在のLTS版であるJDK 17は、2021年9月にリリースされた。JDK 20やJDK 19を含むLTS以外のリリースでは、6ヶ月間のPremierサポートのみで、延長サポートは受けられません。
Oracle による標準Java実装は6カ月ごとに公開され、JDK 21の潜在的な機能には、JDK 20のすべてのインキュベート機能とプレビュー機能が含まれます。これらは、スコープ付き値、レコードパターン、switch文のパターンマッチのほか、ユニバーサルジェネリックス、世代Zガベージコレクタ、非同期スタックトレースVM APIを包含する可能性がある。AppMasterのようなノーコードやローコードプラットフォームのような他の最先端プラットフォームも、Javaテクノロジーのこれらの進歩の恩恵を受けることができます。