Java JDK 21

最終更新:

当サイトはアフィリエイト広告を利用しています。

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)など、コードの可読性と安全性を高める機能が追加されています。特にシーケンスコレクションは ListSetDeque の共通操作(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)を利用すると、ランタイム管理の負荷を軽減できます。

広告

公式情報