Java JDK 21 は 2023年9月19日にリリースされた最新の LTS(Long-Term Support)バージョンです。Oracle JDK の Premier Support は 2028年9月30日まで、Extended Support(有償)は 2031年9月30日まで提供されます。Project Loom の仮想スレッド(Virtual Threads)が正式機能として搭載された初めての LTS バージョンであり、JDK 17 以前からの移行で大幅なパフォーマンス改善が期待できます。本記事では JDK 21 のサポートスケジュールと JDK 17 からの移行手順を解説します。
Java JDK 21 のサポート期限一覧
| サポート種別 | 開始日 | サポート終了日 | 現在のステータス |
|---|---|---|---|
| Premier Support(Oracle JDK) | 2023-09-19 | 2028-09-30 | サポート中 |
| Extended Support(Oracle JDK・有償) | 2028-10-01 | 2031-09-30 | 将来(有償) |
| Amazon Corretto 21 | 2023-09-19 | 2030年10月 | サポート中(無償) |
| Eclipse Temurin 21 | 2023-09-19 | 2028年頃 | サポート中(無償) |
Oracle JDK のサポートポリシー
Oracle JDK の LTS バージョンは Premier Support 5年+Extended Support 3年の計8年間サポートされます。Extended Support は Oracle の有償サポート契約が必要です。Amazon Corretto・Eclipse Temurin などの無償 JDK も長期サポートを提供しますが、終了日は Oracle JDK と異なる場合があります。
基本情報
- リリース日: 2023年9月19日
- 最新バージョン: 21.0.11
- Premier Support 終了: 2028年9月30日(Oracle JDK)
- Extended Support 終了: 2031年9月30日(Oracle JDK・有償)
- Amazon Corretto 21 EOL: 2030年10月(無償)
- 後継製品: Java JDK 25(次期 LTS バージョン・2025年9月リリース予定)
- 主な新機能: 仮想スレッド(Virtual Threads・JEP 444)・シーケンスコレクション(JEP 431)・レコードパターン(JEP 440)・パターンマッチング for switch(JEP 441)・ZGC の世代別対応(JEP 439)
仮想スレッド(Virtual Threads)とは
JDK 21 の最大の新機能は 仮想スレッド(Virtual Threads)の正式導入です。従来の OS スレッドに対応したプラットフォームスレッドとは異なり、JVM が管理する軽量スレッドです。数千〜数十万の仮想スレッドを低メモリで生成でき、I/O 待ちが多い Web サーバーや API サーバーのスループットを大幅に改善します。
// 仮想スレッドの作成(JDK 21以降)
Thread.ofVirtual().start(() -> {
System.out.println("仮想スレッドで実行中: " + Thread.currentThread());
});
// ExecutorService での利用
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> processRequest());
}
Spring Boot 3.2 以降・Quarkus・Micronaut は仮想スレッドに対応しており、設定一つで既存アプリケーションのスループットを向上させることができます。
JDK 17 から JDK 21 への移行理由
JDK 17 は Oracle Extended Support が 2029年9月30日まで有効であり、現時点ではまだサポート対象です。ただし、JDK 21 への移行には多くのメリットがあります。
1. 仮想スレッドによるパフォーマンス改善
I/O 集約型アプリケーションでは、仮想スレッドの導入により従来のスレッドプールモデルと比較してスループットが大幅に向上します。特に同期型 JDBC コードでもパフォーマンスが改善される場合があります。
2. 言語機能の強化
パターンマッチング for switch・レコードパターン・シーケンスコレクション(SequencedCollection)など、コードの可読性と安全性を高める機能が追加されています。特にシーケンスコレクションは List・Set・Deque の共通操作(getFirst()/getLast())を統一できます。
3. フレームワークの最新機能対応
Spring Boot 3.2+・Jakarta EE 10+ は JDK 21 を前提として設計された機能(仮想スレッド統合・GraalVM ネイティブイメージ強化等)を提供しています。JDK 17 以前ではこれらの機能をフルに活用できません。
無償 JDK の選択肢
Oracle JDK は有償サポートなしでも利用可能ですが、長期的なセキュリティパッチを無償で受け取るには以下の JDK ディストリビューションが選択肢になります。
Amazon Corretto 21 — 無償・EOL: 2030年10月
- 提供元: Amazon Web Services
- EOL: 2030年10月
- ライセンス: GPL v2+CE(無償)
- メリット: AWS 環境との親和性が高く、Lambda・EC2・ECS での公式サポート。Oracle JDK と同等のパッチが提供される
- 適したケース: AWS 上での Java アプリケーション
Eclipse Temurin 21 — 無償・OpenJDK ベース
- 提供元: Eclipse Foundation(Adoptium プロジェクト)
- ライセンス: GPL v2+CE(無償)
- メリット: ベンダー非依存の OpenJDK 準拠ディストリビューション。Docker Hub 公式イメージ(
eclipse-temurin:21)が利用可能 - 適したケース: クラウド非依存の環境・マルチクラウド・オンプレミス
JDK 17 → 21 移行時の注意点
モジュールシステムの制限強化
JDK 21 では一部の内部 API へのアクセスがさらに制限されています。--add-opens フラグで回避していた内部 API 利用は、公式 API に移行する必要があります。jdeps ツールで依存性を事前に確認してください。
フレームワーク・ライブラリの JDK 21 対応確認
使用しているフレームワーク(Spring Boot・Hibernate・Quarkus等)および主要ライブラリが JDK 21 に対応しているかを確認してください。Spring Boot の場合、3.2 以降が JDK 21 の仮想スレッドに正式対応しています。
ホスティング環境の見直し
Java アプリケーションをセルフホストしている場合、JDK のバージョン管理・セキュリティパッチ適用・ヒープサイズ設定はすべて手動で行う必要があります。クラウドマネージドサービス(AWS Elastic Beanstalk・Azure App Service・Google Cloud Run)を利用すると、ランタイム管理の負荷を軽減できます。