Contents
1. リリースとサポート期間(中立的な事実に基づく記述)
| バージョン | リリース日 | Premier Support 終了予定 | Extended Support 終了予定 |
|---|---|---|---|
| Java 17 | 2021‑09‑14 | 2026‑09‑30 | 2028‑09‑30 |
| Java 21 | 2023‑09‑19 | 2028‑09‑30(5 年) | 2031‑09‑30(+3 年) |
情報源: Oracle が公開している Java SE Support Roadmap(2026 年 3 月版)に基づく。
Oracle のサポートは「Premier Support」5 年間、その後「Extended Support」3 年間が標準で提供されることが明記されています。したがって、Java 21 は 2031 年 9 月まで Extended Support が継続すると期待できます(正確な終了日は Oracle の将来のアナウンスに依存)。
注:上表は現在公表されている情報のみを掲載しており、未発表の次期 LTS バージョン(例: Java 25)については含めていません。
2. Java 21 に導入された主要機能
2‑1. Pattern Matching for switch と Record Patterns
概要
Pattern Matching が switch 文とレコード分解に正式実装され、型チェックとデコンストラクションが一つの式で記述可能になりました。これにより instanceof のキャストや手動フィールド取得を省略でき、コードの可読性と安全性が向上します。
サンプルコード
|
1 2 3 4 5 6 7 8 9 |
static String describe(Object obj) { return switch (obj) { case Point(int x, int y) -> "Point at (" + x + "," + y + ")"; case Rectangle(Point p, int w, int h) -> "Rectangle at " + p + " size " + w + "×" + h; default -> obj.toString(); }; } |
JEP 441 (Pattern Matching for switch) が正式に採択されたことが根拠です。
2‑2. Sealed Interfaces の拡張
概要
Sealed Interface に対し、同一ソースファイル内で複数の実装クラスを宣言できるようになり、API 設計時に許可クラスを明示的に管理しやすくなりました。これによりプラグインアーキテクチャや DSL の安全な拡張が容易になります。
サンプルコード
|
1 2 3 4 5 6 |
public sealed interface Shape permits Circle, Square { double area(); } final class Circle implements Shape { /* ... */ } final class Square implements Shape { /* ... */ } |
JEP 409 (Sealed Classes) のアップデートに基づく機能です。
2‑3. Virtual Threads(軽量スレッド)
概要
Project Loom が Java 21 に統合され、Virtual Thread の実装が本格化しました。内部スケジューラの最適化により、I/O バウンドワークロードでのスループットが従来のプレビュー版に比べて 顕著に向上 しています(具体的な数値はベンチマーク環境に依存するため、ここでは「改善」と表現します)。
サンプルコード
|
1 2 3 4 5 6 7 8 |
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); try (executor) { List<CompletableFuture<String>> futures = urls.stream() .map(url -> CompletableFuture.supplyAsync(() -> fetch(url), executor)) .toList(); futures.forEach(CompletableFuture::join); } |
JEP 444 (Virtual Threads) の実装に伴う変更点です。OpenJDK の公式ベンチマークレポジトリ(jdk.test.lib.jmh)で公開されている結果を参考にしてください。
2‑4. Foreign Function & Memory API(FFM)の正式化
概要
プレビュー段階で提供されていた java.lang.foreign パッケージが正式リリースされ、ネイティブコード呼び出しや安全なメモリ操作を Java だけで実現できるようになりました。JNI に比べて型安全性とオーバーヘッドの低減が期待されます(具体的な性能数値は利用シナリオにより変動)。
サンプルコード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.lang.foreign.*; import static java.lang.foreign.ValueLayout.*; MemorySegment segment = MemorySegment.allocateNative(JAVA_INT); VarHandle intHandle = JAVA_INT.varHandle(); intHandle.set(segment, 0, 42); // ネイティブメモリに書き込み Linker linker = Linker.nativeLinker(); SymbolLookup stdlib = SymbolLookup.libraryLookup("c", Arena.global()); MemoryAddress putsAddr = stdlib.lookup("puts") .orElseThrow(); MethodHandle putsMH = linker.downcallHandle( putsAddr, FunctionDescriptor.of(JAVA_INT, ADDRESS)); putsMH.invokeExact(segment.address()); // C の puts を呼び出し |
JEP 424 (Foreign Function & Memory API) が正式に採択されたことが根拠です。
3. Java 21 と Java 17 の比較(機能中心)
| 項目 | Java 17 | Java 21 | 主な利点 |
|---|---|---|---|
Pattern Matching for switch / Record Patterns |
プレビュー段階(JEP 406) | 正式実装(JEP 441) | コンパイル時チェックとデコンストラクションが標準化 |
| Sealed Interfaces の拡張 | 基本機能のみ(JEP 409) | 同一ファイル内で複数実装可能 | API 設計の柔軟性向上 |
| Virtual Threads | プレビュー(Project Loom) | 本格実装(JEP 444) | 軽量スレッドによる並行処理のシンプル化 |
| Foreign Function & Memory API | プレビュー(JEP 412) | 正式リリース(JEP 424) | JNI 代替として安全かつ高速なネイティブ連携 |
| Structured Concurrency | プレビュー(JEP 428、JDK 22) | まだプレビュー段階 | 将来の LTS で標準化が期待される |
ポイント
Java 21 は上記機能を「正式リリース」レベルで提供し、長期サポートが保証されている点が企業導入の重要判断材料となります。
4. 将来予測:次期 LTS(Java 25)に期待できる技術的方向性
Oracle が公表している JDK Future Feature Roadmap(2025 年版)と、各 JEP のステータスから以下の点が見込まれます。なお、これらは「計画中」または「プレビュー段階」であり、リリース日や正確な仕様は今後の決定に依存します。
| 予測項目 | 現行 Java 21 の状態 | Java 25(予定) |
|---|---|---|
| Structured Concurrency | プレビュー (JDK 22) | LTS に昇格し、標準 API として利用可能 |
| Value Classes(価値型) | 準備中(Project Valhalla のプレビュー) | inline class が正式実装され、メモリ効率が大幅改善 |
| 拡張 Pattern Matching | switch と record に対応 | タプル型や多段階パターンマッチングのサポートが追加予定 |
| Virtual Threads の統合深化 | スケジューラ最適化済み | カーネルレベルとの統合が進み、スループット向上が期待 |
| Foreign Function & Memory API の拡張 | 正式リリース | メモリセグメントプール管理機構や非同期呼び出しサポートの追加 |
留意点:これらは「計画」ベースの情報であり、実装スケジュールや具体的な性能指標は Oracle の公式発表があるまで確定できません。
5. 移行時のリスクとベストプラクティス
5‑1. 互換性チェックリスト
| チェック項目 | 推奨ツール・手法 |
|---|---|
| 非推奨 API の使用有無 | jdeprscan(JDK 標準)で全プロジェクトをスキャン |
| バイトコード互換性の検証 | jlink --verify で生成イメージを確認 |
| パフォーマンス回帰テスト | JMH ベンチマークを主要モジュールで実行 |
| Native メモリ API の置き換え | jdeps --module java.base とコードレビューで FFM 移行箇所を特定 |
5‑2. CI/CD パイプラインへの組み込み例(GitHub Actions)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
name: Java CI (Maven) – Java 21 on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # JDK 21 のセットアップ(Temurin 配布元) - name: Set up JDK 21 uses: actions/setup-java@v3 with: distribution: temurin java-version: '21' # 非推奨 API スキャン - name: Scan for deprecated APIs run: | ./mvnw dependency:resolve jdeps --module-path target/classes -cp $(./mvnw help:evaluate -Dexpression=project.build.outputDirectory -q -DforceStdout) -R | grep deprecation # ビルド・テスト - name: Build with Maven run: ./mvnw -B clean verify # JMH ベンチマーク(オプション) - name: Run JMH benchmarks if: github.event_name == 'push' run: | ./mvnw -DskipTests package java -jar target/benchmarks.jar |
このワークフローは Java 21 のビルド、非推奨 API の検出、標準テスト を自動化し、プルリクエストごとに移行リスクを可視化します。
5‑3. 移行フェーズの実務的アプローチ
- 評価フェーズ
- 小規模モジュールで Java 21 ビルドを試し、コンパイルエラーや警告を洗い出す。
- パイロットフェーズ
- 本番環境と同等のステージング環境にデプロイし、JMH によるベンチマークと統合テストを実施。
- 本格移行フェーズ
- 全サービスで
java.version=21を設定し、CI パイプラインに組み込んだチェックリストを必須化する。 - 運用フェーズ
- Extended Support 期間中は Oracle のパッチリリース情報を定期的に確認し、必要に応じて JDK バージョンのマイナーチェックアップを実施。
6. 結論(中立的なまとめ)
- Java 21 は LTS として、2028 年まで Premier Support、2031 年まで Extended Support が提供される ことから、長期的に安定したプラットフォームを求める組織に適しています。
- Pattern Matching、Sealed Interfaces の拡張、Virtual Threads、Foreign Function & Memory API といった機能は、開発効率と実行性能の両面で実用的な価値を提供します(具体的な数値は環境依存)。
- 移行作業は互換性チェックと自動化テストを中心に段階的に進める ことで、リスクを最小限に抑えられます。
- 将来的に Java 25(次期 LTS) が登場する見通しですが、現時点では計画段階の情報であることを踏まえて、まずは Java 21 の採用・安定運用を目指すのが実務的です。
本稿は公表済み情報と公式 JEP(JDK Enhancement Proposal)に基づき、中立的な観点から Java 21 の導入検討材料を提供することを目的としています。
参考文献
- Oracle Java SE Support Roadmap (2026‑03 edition) – https://www.oracle.com/java/technologies/javase-support-roadmap.html
- JEP 441 – Pattern Matching for switch – https://openjdk.org/jeps/441
- JEP 444 – Virtual Threads – https://openjdk.org/jeps/444
- JEP 424 – Foreign Function & Memory API – https://openjdk.org/jeps/424
- OpenJDK JMH Benchmarks Repository – https://github.com/openjdk/jmh
この文書は情報提供のみを目的とし、特定のベンダー製品やサービスを推奨するものではありません。