- JAVA
Javaバージョン一覧【2026年】LTSのサポート期限とJava 27・28
2026年10月16日時点で、Java の最新版は Java 27(2026年9月15日リリース、非LTS)、最新の LTS は Java 25(2025年9月16日リリース)です。LTS(長期サポート版)は 8・11・17・21・25 の5つで、次の LTS は2027年9月予定の Java 29、その前に Java 28 が2027年3月に出る予定です。
Java は3月と9月の年2回、新しい版が出ます。そのうち2年に1回の版が LTS になり、何年も更新(セキュリティ修正)が続きます。サポート期限は「どこが配布する JDK か」で違います。 同じ Java 17 でも、Oracle の Premier Support は2026年9月で終わり、Amazon Corretto は2029年10月まで更新が続きます。
まず結論:LTS のサポート期限の早見表
| 版 | リリース | Oracle(Premier / Extended) | OpenJDK 系の主な期限 | 2026年10月時点 |
|---|---|---|---|---|
| Java 8 | 2014年3月 | 2022年3月 / 2030年12月 | Temurin・Corretto 2030年12月 | 保守のみ。Red Hat の通常サポートは2026年11月30日まで |
| Java 11 | 2018年9月 | 2023年9月 / 2032年1月 | Temurin 2027年10月、Corretto 2032年1月 | 移行の計画を始める時期 |
| Java 17 | 2021年9月 | 2026年9月 / 2029年9月 | Temurin 2027年10月、Corretto 2029年10月 | Oracle Premier が終了。移行先を決める時期 |
| Java 21 | 2023年9月 | 2028年9月 / 2031年9月 | Temurin 2029年12月、Corretto 2030年10月 | 主力の LTS。Oracle JDK の無償更新は2026年9月まで |
| Java 25 | 2025年9月 | 2030年9月 / 2033年9月 | Temurin 2031年9月、Corretto 2032年10月 | 新しく始めるなら第一候補 |
| Java 29(予定) | 2027年9月予定 | 2032年9月 / 2035年9月 | ― | 次の LTS(Oracle ロードマップ) |
(Temurin の期限は「少なくとも(At least)」の日付。配布元ごとの全項目は後半の表にあります)
確認環境:OpenJDK 8u504・11.0.32.1・17.0.20.1・21.0.10・25.0.4.1(Ubuntu 24.04 のパッケージ)で、java -version・release ファイル・クラスファイルの版・移行時のエラーを実行して確かめ、出力をそのまま載せています。Java 26・27・28 の内容とサポート期限は、Oracle Java SE Support Roadmap、Oracle JDK 26・27 リリースノート、OpenJDK の JDK プロジェクトページ、Adoptium・Amazon Corretto・Microsoft Learn・Red Hat・Azul の公式ページ、Java 28 の JEP は InfoQ の報道で確かめました(確認日 2026年10月16日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Javaバージョン一覧【2026年】LTSのサポート期限とJava 27・28」
Java の最新バージョンと LTS のしくみ
| 用語 | 意味 |
|---|---|
| フィーチャーリリース | 6か月ごと(3月・9月)に出る新しい版(Java 26、27、28 など) |
| LTS(Long-Term Support) | 長期間、更新が提供される版。2021年以降は2年ごと(17 → 21 → 25 → 29) |
| 非LTS | 次の版が出るまで(約6か月)だけ更新される版。Azul は STS と呼ぶ |
| アップデートリリース | 1・4・7・10月に出る修正版(25.0.1、25.0.2 …) |
| プレビュー機能 | 正式化の前に試せる機能。--enable-preview を付けたときだけ使える |
LTS は OpenJDK(Java のオープンソース実装)が決めるものではなく、Oracle などの配布元が「この版を長く更新する」と決めたものです。 実際には主要な配布元が同じ版(8・11・17・21・25)を LTS にしているため、一般に「Java の LTS」と呼ばれています。
2026年10月16日時点の「最新」
| 区分 | 版 | 日付 | 補足 |
|---|---|---|---|
| 最新版 | Java 27 | 2026年9月15日 | 非LTS。Oracle の Premier は2027年3月まで |
| 最新の LTS | Java 25 | 2025年9月16日 | 最新アップデートは 25.0.x(四半期ごと) |
| 次の版 | Java 28 | 2027年3月予定 | 非LTS。機能の凍結は2026年12月上旬の予定(InfoQ) |
| 次の LTS | Java 29 | 2027年9月予定 | Oracle ロードマップでは LTS |
| サポートが終わった非LTS | Java 26 | 2026年3月17日 | Oracle・Temurin とも2026年9月で終了 |
timeline
title Java の LTS とリリース間隔
2014 : Java 8 (LTS)
2018 : Java 11 (LTS)
2021 : Java 17 (LTS) : 以降は2年ごと
2023 : Java 21 (LTS)
2025 : Java 25 (LTS)
2026 : Java 26 : Java 27(最新)
2027 : Java 28(3月予定) : Java 29(9月予定・LTS)
Java バージョン一覧(Java 8〜28)
各版のリリース日・LTS かどうか・主な正式機能と JEP 番号(JDK Enhancement Proposal、機能ごとの提案番号)です。
| 版 | リリース日 | LTS | 主な新機能(JEP 番号) |
|---|---|---|---|
| 8 | 2014-03-18 | ○ | ラムダ式、Stream API、java.time、Optional、インターフェースの default メソッド |
| 9 | 2017-09-21 | モジュールシステム(261)、jshell(222)、List.of などのファクトリメソッド(269) |
|
| 10 | 2018-03-20 | var(286) |
|
| 11 | 2018-09-25 | ○ | HTTP Client(321)、単一ファイル実行(330)、Java EE・CORBA モジュール削除(320) |
| 12 | 2019-03-19 | switch 式(プレビュー)、Shenandoah GC(実験的) | |
| 13 | 2019-09-17 | テキストブロック(プレビュー) | |
| 14 | 2020-03-17 | switch 式(361)、分かりやすい NullPointerException のメッセージ(358) | |
| 15 | 2020-09-15 | テキストブロック(378)、ZGC が製品機能に(377)、Nashorn 削除(372) | |
| 16 | 2021-03-16 | record(395)、instanceof のパターンマッチ(394)、JDK 内部の強いカプセル化が既定に(396) | |
| 17 | 2021-09-14 | ○ | sealed クラス(409)、JDK 内部の強いカプセル化(403)、SecurityManager を削除予定に(411) |
| 18 | 2022-03-22 | 既定の文字コードが UTF-8(400)、簡易 Web サーバー jwebserver(408) |
|
| 19 | 2022-09-20 | 仮想スレッド(プレビュー)、record パターン(プレビュー) | |
| 20 | 2023-03-21 | Scoped Values(インキュベーター)など、プレビューの改良 | |
| 21 | 2023-09-19 | ○ | 仮想スレッド(444)、switch のパターンマッチ(441)、record パターン(440)、シーケンスコレクション(431)、世代別 ZGC(439) |
| 22 | 2024-03-19 | 無名変数 _(456)、FFM API(454)、複数ファイルのソース実行(458) |
|
| 23 | 2024-09-17 | Javadoc の Markdown 記法(467)、ZGC の世代別モードが既定に(474) | |
| 24 | 2025-03-18 | 仮想スレッドの pinning 解消(491)、Stream Gatherers(485)、Class-File API(484)、SecurityManager の恒久的な無効化(486) | |
| 25 | 2025-09-16 | ○ | コンパクトソースファイルとインスタンス main(512)、モジュール import(511)、柔軟なコンストラクタ本体(513)、Scoped Values(506)、コンパクトオブジェクトヘッダ(519)、鍵導出関数 API(510) |
| 26 | 2026-03-17 | HTTP/3 対応の HTTP Client(517)、任意の GC での AOT オブジェクトキャッシュ(516)、G1 のスループット改善(522)、Applet API 削除(504) | |
| 27 | 2026-09-15 | G1 が全環境で既定の GC(523)、コンパクトオブジェクトヘッダが既定(534)、TLS 1.3 のポスト量子ハイブリッド鍵交換(527)、JFR のデータ秘匿(536) | |
| 28 | 2027年3月予定 | 値クラスと値オブジェクト(401、プレビュー)、Simple JSON API(540、インキュベーター)など(下の節) |
(9〜25 の日付は OpenJDK の JDK プロジェクトページ、26・27 は Oracle JDK リリースノートで確かめました。12・13・19・20 は正式機能がないためプレビューを載せています)
Java 27 の新機能(2026年9月15日リリース)
Oracle JDK 27 リリースノート(build 27+35)と InfoQ のリリース記事で確かめた JEP は9件です。正式機能は4件、残り5件はプレビューかインキュベーター(試験版)です。
| JEP | 機能 | 区分 | 何が変わるか |
|---|---|---|---|
| 523 | G1 を全環境で既定の GC に | 正式 | CPU やメモリが少ない環境でも、既定の GC が Serial ではなく G1 になる |
| 534 | コンパクトオブジェクトヘッダを既定に | 正式 | Java 25 で製品機能になった省メモリのヘッダが、オプションなしで有効になる |
| 527 | TLS 1.3 のポスト量子ハイブリッド鍵交換 | 正式 | 量子計算機への備えとして、従来方式と ML-KEM を組み合わせた鍵交換を使える |
| 536 | JFR のプロセス内データ秘匿 | 正式 | JFR(Java Flight Recorder)の記録から機密値を伏せられる |
| 531 | Lazy Constants | 第3プレビュー | 必要になったときに一度だけ初期化する定数 |
| 532 | プリミティブ型のパターンマッチ | 第5プレビュー | switch や instanceof で int などを扱う |
| 533 | Structured Concurrency | 第7プレビュー | 複数の並行処理をひとまとまりで扱う |
| 537 | Vector API | 第12インキュベーター | SIMD 命令を使うベクトル演算 |
| 538 | 暗号オブジェクトの PEM 形式 | 第3プレビュー | 鍵や証明書を PEM 文字列と相互変換する |
リリースノートでは、削除された機能として Linux の VFORK 起動方式、ThreadPoolExecutor.finalize()、-noverify・-Xverify:none などのオプション、実験的な JVMCI(JVM Compiler Interface)が挙がっています。-Xverify:none や -noverify を起動オプションに残しているアプリは、Java 27 に上げる前に外しておくと安全です。 Java 27 の機能の詳細は、関連記事「Java 27の新機能まとめ|値クラス(Valhalla)も解説」で扱っています。
Java 28 の予定と JEP(2027年3月予定)
Oracle のロードマップでは、Java 28 は2027年3月リリースの非LTS で、Premier Support は2027年9月までです。InfoQ の報道(2026年8〜9月)では、次の JEP が Java 28 の対象(Targeted)か、対象に提案(Proposed to Target)されています。
| JEP | 機能 | 区分 | 状態(報道時点) |
|---|---|---|---|
| 401 | 値クラスと値オブジェクト(Project Valhalla) | プレビュー | Targeted |
| 539 | JVM での厳格なフィールド初期化 | プレビュー | Targeted |
| 540 | Simple JSON API | インキュベーター | Targeted |
| 535 | Shenandoah GC の世代別モードを既定に | 正式 | Targeted |
| 541 | macOS/x64 ポートを削除予定に | 正式 | Targeted |
| 542 | 暗号オブジェクトの PEM 形式 | 正式 | Proposed to Target |
JEP 401 は、Java に「値オブジェクト」(同一性を持たず、フィールドの値だけで区別されるオブジェクト)を加える、Project Valhalla の最初のプレビューです。 プレビューなので、試すには --enable-preview が要ります。Java 28 の機能は、機能の凍結(Rampdown Phase One、2026年12月上旬の予定)まで増減します。最終的な一覧は OpenJDK の JDK 28 プロジェクトページで確定します。
Intel Mac(macOS/x64)で開発している場合、JEP 541 で macOS/x64 版が「削除予定」になるため、将来の版では Apple シリコン版への移行が前提になります。
LTS の配布元別サポート期限(2026年10月16日確認)
Java の更新は、使う配布元(JDK のビルドを提供する組織)で期限が違います。 表は2つに分けています。
Oracle・Eclipse Temurin・Amazon Corretto
| LTS | Oracle Premier | Oracle Extended(有償) | Eclipse Temurin(少なくとも) | Amazon Corretto |
|---|---|---|---|---|
| 8 | 2022年3月(終了) | 2030年12月 | 2030年12月 | 2030年12月 |
| 11 | 2023年9月(終了) | 2032年1月 | 2027年10月 | 2032年1月 |
| 17 | 2026年9月(終了) | 2029年9月 | 2027年10月 | 2029年10月 |
| 21 | 2028年9月 | 2031年9月 | 2029年12月 | 2030年10月 |
| 25 | 2030年9月 | 2033年9月 | 2031年9月 | 2032年10月 |
Microsoft・Red Hat・Azul
| LTS | Microsoft Build of OpenJDK | Red Hat 通常サポート(Full) | Red Hat ELS-1(追加契約) | Azul(Core / Prime) |
|---|---|---|---|---|
| 8 | 提供なし(Temurin を案内) | 2026年11月30日 | 2032年12月31日 | 2030年12月 |
| 11 | 2027年9月 | 2024年10月31日(終了) | 2032年1月31日 | 2032年1月 |
| 17 | 2027年9月 | 2027年12月31日 | 2029年1月31日 | 2029年9月 |
| 21 | 2028年9月 | 2029年12月31日 | 2031年9月30日 | 2031年9月 |
| 25 | 2030年9月 | 2030年12月31日 | 2033年9月30日 | 2033年9月 |
| 配布元 | 確かめたページ | 期限の意味 |
|---|---|---|
| Oracle JDK | Oracle Java SE Support Roadmap | Premier・Extended は有償契約のサポート。17 以降の日付は「or later(それ以降)」 |
| Eclipse Temurin | adoptium.net の Support ページ | 「At least(少なくとも)」の日付。延長されることがある |
| Amazon Corretto | Amazon Corretto FAQs | 無償の更新が終わる日(End of Life) |
| Microsoft Build of OpenJDK | Microsoft Learn「Support roadmap」 | 「earliest end-of-support date(最も早い終了日)」。延長されることがある |
| Red Hat build of OpenJDK | Red Hat「OpenJDK Life Cycle and Support Policy」 | RHEL 上での期限。ELS は追加契約 |
| Azul(Zulu ビルド) | Azul Support Roadmap | 有償サポート(Azul Platform Core / Prime)の期限 |
非LTS の期限は短く、Java 26 は Oracle・Temurin とも2026年9月、Corretto は2026年10月で終わります。Java 27 は Oracle・Temurin・Azul が2027年3月、Corretto が2027年4月までです。
Java 8・11・17・21・25 の期限の違い
| 版 | いちばん早く終わる期限 | いちばん長い期限 | 読み方 |
|---|---|---|---|
| Java 8 | Red Hat 通常サポート:2026年11月30日 | Red Hat ELS-1:2032年12月31日 | 無償ビルドは2030年12月が目安。11 での Java EE 削除など、上げるときの変更点が多い |
| Java 11 | Microsoft:2027年9月 | Oracle Extended・Corretto・Azul:2032年1月 | Temurin・Microsoft は2027年で終わる。8 より先に期限が来る配布元がある |
| Java 17 | Oracle Premier:2026年9月(終了) | Oracle Extended・Azul:2029年9月 | 無償で使える Corretto でも2029年10月まで |
| Java 21 | Oracle JDK の無償更新:2026年9月 | Oracle Extended・Red Hat ELS-1・Azul:2031年9月 | OpenJDK ビルドなら2028〜2030年まで無償の更新がある |
| Java 25 | Microsoft・Oracle Premier:2030年9月 | Oracle Extended・Red Hat ELS-1・Azul:2033年9月 | 今いちばん長く使える LTS |
Java 11 は Java 8 より先に無償ビルドの期限が来る配布元があります(Temurin は 8 が2030年12月、11 は2027年10月)。Java 8 の期限は、長く使われてきた経緯から特別に長く設定されています。
「OpenJDK のサポート期限」とは
OpenJDK そのものには、決まったサポート期限はありません。 OpenJDK はソースコードのプロジェクトで、各配布元がそこからビルドを作り、更新の期間を決めています。jdk.java.net で Oracle が配る OpenJDK ビルド(GPL ライセンス)は、次の版が出るまでの約6か月だけ更新されます。LTS の更新を長く受けたい場合は、上の表の配布元のビルドを使います。
Oracle JDK のライセンス:NFTC と OTN の違い
Oracle JDK(Oracle が配る JDK)は、版と時期によってライセンスが変わります。NFTC は Oracle No-Fee Terms and Conditions、OTN は Oracle Technology Network License の略です。
| 項目 | NFTC(No-Fee Terms and Conditions) | OTN(Technology Network License) |
|---|---|---|
| 無償で使える範囲 | 商用・本番を含め、すべての利用者 | 個人利用・開発・テストなど。本番の業務利用は有償契約が前提 |
| 対象 | Oracle JDK 17〜25 の、決められた期間の更新 | NFTC の期間が終わった後の更新、Java 8・11 の更新 |
| 期間 | 次の LTS が出てから1年後まで | 期限の定めなし |
| Oracle JDK | NFTC での更新 | その後 |
|---|---|---|
| 17 | 2024年9月まで | 2024年10月15日の更新から OTN |
| 21 | 2026年9月まで | 2026年10月のクリティカルパッチアップデート(CPU)から OTN の予定 |
| 25 | 2025年9月〜2028年9月 | 2028年9月より後の更新は OTN の予定 |
Oracle JDK 21 を無償で本番に使っている場合、2026年10月以降の更新は OTN ライセンスになります。 Oracle のロードマップは、無償の条件で使い続けたい利用者に Oracle JDK 25 以降への移行を案内しています。ほかの方法として、Temurin や Corretto などの OpenJDK ビルドに切り替える方法があります。OpenJDK ビルドは GPLv2 + Classpath Exception で、商用でも無償で使えます。ライセンスの扱いは、組織の方針と Oracle の最新の案内で決めます。
手元の Java のバージョンを確かめる方法
java -version の出力(JDK 8〜25)
Ubuntu 24.04 の OpenJDK で実行した結果です。
$ java -version # JDK 8
openjdk version "1.8.0_504"
OpenJDK Runtime Environment (build 1.8.0_504-8u504-ga-1ubuntu1~24.04.3-b01)
OpenJDK 64-Bit Server VM (build 25.504-b01, mixed mode)
$ java -version # JDK 11
openjdk version "11.0.32.1" 2026-08-18
OpenJDK Runtime Environment (build 11.0.32.1+1-post-1ubuntu1-24.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 11.0.32.1+1-post-1ubuntu1-24.04-Ubuntu, mixed mode, sharing)
$ java -version # JDK 17
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-24.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-24.04-Ubuntu, mixed mode, sharing)
$ java -version # JDK 21
openjdk version "21.0.10" 2026-01-20
OpenJDK Runtime Environment (build 21.0.10+7-Ubuntu-124.04)
OpenJDK 64-Bit Server VM (build 21.0.10+7-Ubuntu-124.04, mixed mode, sharing)
$ java -version # JDK 25
openjdk version "25.0.4.1" 2026-08-18
OpenJDK Runtime Environment (build 25.0.4.1+1-1-24.04.4-Ubuntu)
OpenJDK 64-Bit Server VM (build 25.0.4.1+1-1-24.04.4-Ubuntu, mixed mode, sharing)
| 見るところ | 例 | 意味 |
|---|---|---|
1行目の "1.8.0_504" |
JDK 8 | Java 8 までは 1.8 のように「1.」が付く。_504 が更新番号 |
1行目の "25.0.4.1" |
JDK 9 以降 | 「機能版.中間.更新.パッチ」。25 が機能版(Java 25) |
| 1行目の日付 | 2026-08-18 |
その更新が出た日。JDK 8 では表示されない |
build の後ろ |
Ubuntu、LTS など |
配布元の情報。配布元によっては1行目に LTS と付く |
JDK 8 には --version(ハイフン2つ)がありません。 JDK 8 で実行すると次のエラーになります。JDK 9 以降は java -version(標準エラーに出力)と java --version(標準出力に出力)の両方が使えます。
$ java --version # JDK 8
Unrecognized option: --version
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
$ java --version # JDK 25
openjdk 25.0.4.1 2026-08-18
OpenJDK Runtime Environment (build 25.0.4.1+1-1-24.04.4-Ubuntu)
OpenJDK 64-Bit Server VM (build 25.0.4.1+1-1-24.04.4-Ubuntu, mixed mode, sharing)
JAVA_HOME と PATH の java が違う版を指すことがある
java -version が見ているのは PATH の先頭にある java で、Maven や Gradle、IDE は JAVA_HOME の JDK を使います。 2つが違う版を指すと、「ターミナルでは 21 なのにビルドは 25」といったずれが起きます。
$ echo $JAVA_HOME
/usr/lib/jvm/java-25-openjdk-amd64
$ java -version 2>&1 | head -1
openjdk version "21.0.10" 2026-01-20
$ "$JAVA_HOME/bin/java" -version 2>&1 | head -1
openjdk version "25.0.4.1" 2026-08-18
$ readlink -f "$(which java)"
/usr/lib/jvm/java-21-openjdk-amd64/bin/java
| OS | PATH の java の場所 | JAVA_HOME の確かめ方 |
|---|---|---|
| Linux | readlink -f "$(which java)" |
echo $JAVA_HOME |
| macOS | /usr/libexec/java_home -V(入っている JDK の一覧) |
echo $JAVA_HOME |
| Windows(PowerShell) | where.exe java |
echo $env:JAVA_HOME |
| Windows(コマンドプロンプト) | where java |
echo %JAVA_HOME% |
Linux で複数の JDK を切り替える場合は sudo update-alternatives --config java で PATH の java を選びます。Windows での JAVA_HOME の設定は、関連記事「Javaインストール(Windows)|JDK 25とJAVA_HOME設定まで」で扱っています。
release ファイルで、起動せずに版と配布元を見る
JDK のフォルダの直下にある release ファイルには、版と配布元が書かれています。サーバーに入っている JDK を、起動せずに確かめられます。
$ cat /usr/lib/jvm/java-25-openjdk-amd64/release
IMPLEMENTOR="Ubuntu"
JAVA_RUNTIME_VERSION="25.0.4.1+1-1-24.04.4-Ubuntu"
JAVA_VERSION="25.0.4.1"
JAVA_VERSION_DATE="2026-08-18"
LIBC="gnu"
MODULES="java.base java.compiler java.datatransfer ...(省略)"
OS_ARCH="x86_64"
OS_NAME="Linux"
SOURCE=""
| JDK | JAVA_VERSION |
IMPLEMENTOR |
|---|---|---|
| 11 | 11.0.32.1 |
Ubuntu |
| 17 | 17.0.20.1 |
Ubuntu |
| 21 | 21.0.10 |
Ubuntu |
| 25 | 25.0.4.1 |
Ubuntu |
| 8 | (Ubuntu の JDK 8 パッケージには release ファイルがない) |
― |
IMPLEMENTOR は配布元で、Temurin なら Eclipse Adoptium、Corretto なら Amazon.com Inc. のような値になります。
プログラムの中で版を確かめる
public class VersionInfo {
public static void main(String[] args) {
String[] keys = {"java.version", "java.specification.version",
"java.vendor", "java.class.version", "java.home"};
for (String k : keys) {
System.out.println(k + " = " + System.getProperty(k));
}
}
}
各 JDK でコンパイルして実行した結果です。
| JDK | java.version |
java.specification.version |
java.class.version |
java.home |
|---|---|---|---|---|
| 8 | 1.8.0_504 | 1.8 | 52.0 | .../java-8-openjdk-amd64/jre |
| 11 | 11.0.32.1 | 11 | 55.0 | .../java-11-openjdk-amd64 |
| 17 | 17.0.20.1 | 17 | 61.0 | .../java-17-openjdk-amd64 |
| 21 | 21.0.10 | 21 | 65.0 | .../java-21-openjdk-amd64 |
| 25 | 25.0.4.1 | 25 | 69.0 | .../java-25-openjdk-amd64 |
java.vendor はすべて Ubuntu でした。JDK 8 だけ java.home が jre フォルダを指します。 JDK 9 以降は Runtime.version().feature() で機能版の番号(25 など)を整数で取れます。
クラスファイルの版と UnsupportedClassVersionError
java.class.version の数字(52・55・61・65・69)は、その JDK が読めるクラスファイルの版の上限です。新しい JDK でコンパイルしたクラスを、それより前の JDK で動かすと UnsupportedClassVersionError になります。 JDK 25 でコンパイルしたクラスを JDK 8 と JDK 21 で実行した結果です。
$ java -cp c25 VersionInfo # JDK 8
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: VersionInfo has been compiled by a more recent version of the Java Runtime (class file version 69.0), this version of the Java Runtime only recognizes class file versions up to 52.0
$ java -cp c25 VersionInfo # JDK 21
Error: LinkageError occurred while loading main class VersionInfo
java.lang.UnsupportedClassVersionError: VersionInfo has been compiled by a more recent version of the Java Runtime (class file version 69.0), this version of the Java Runtime only recognizes class file versions up to 65.0
| クラスファイルの版 | Java の版 |
|---|---|
| 52 | Java 8 |
| 55 | Java 11 |
| 61 | Java 17 |
| 65 | Java 21 |
| 69 | Java 25 |
jar に入っているクラスの版は javap -v -cp アプリ.jar クラス名 | grep major で確かめられます(major version: 69 なら Java 25 向け)。新しい JDK で、前の版の Java 向けにビルドするには javac --release 8 のように --release を付けます。 JDK 25 の javac で --release 8 を付けると、ビルドはできますが次の警告が出ます。--release 7 はエラーです。
$ javac --release 8 -d r8 VersionInfo.java # JDK 25
warning: [options] source value 8 is obsolete and will be removed in a future release
warning: [options] target value 8 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
3 warnings
$ javac --release 7 -d r8 VersionInfo.java # JDK 25
error: release version 7 not supported
Maven でこのエラーが出る場合は、関連記事「release version not supportedの直し方|Maven」で扱っています。
LTS ごとの新機能をコードの前後比較で
Java 8 風と Java 21 風を並べる
在庫を表す小さなプログラムを、Java 8 までの書き方と Java 21 までの機能を使った書き方で比べます。どちらも OpenJDK 21.0.10 で実行しました。
Java 8 までの書き方(Before8.java):
import java.util.*;
// Java 8 までの書き方(Java 21 でもそのまま動く)
public class Before8 {
static final class Item { // データを入れるだけのクラス
private final String name; private final int stock;
Item(String name, int stock) { this.name = name; this.stock = stock; }
String name() { return name; }
int stock() { return stock; }
@Override public String toString() { return "Item[name=" + name + ", stock=" + stock + "]"; }
// equals / hashCode も本来は必要
}
static String label(Object o) {
if (o instanceof Item) {
Item i = (Item) o; // キャストが必要
return i.stock() == 0 ? "在庫切れ: " + i.name() : "在庫あり: " + i.name();
}
return "不明";
}
static String size(int stock) {
String s;
switch (stock / 10) {
case 0: s = "少"; break;
case 1: case 2: s = "中"; break;
default: s = "多";
}
return s;
}
public static void main(String[] args) {
List<Item> items = new ArrayList<>(Arrays.asList(
new Item("ペン", 0), new Item("ノート", 15), new Item("付箋", 42)));
String sql = "SELECT name, stock\n" +
"FROM item\n" +
"WHERE stock > 0";
for (Item i : items) System.out.println(label(i) + " / " + size(i.stock()));
System.out.println(sql);
System.out.println("最後の要素: " + items.get(items.size() - 1));
}
}
Java 21 の書き方(After21.java):
import java.util.*;
// Java 21 の書き方(var・テキストブロック・record・switch 式・パターンマッチ・sealed・SequencedCollection)
public class After21 {
sealed interface Stockable permits Item, Bundle {}
record Item(String name, int stock) implements Stockable {} // Java 16
record Bundle(String name, List<Item> items) implements Stockable {}
static String label(Stockable s) {
return switch (s) { // Java 21 パターンマッチ
case Item(var name, var stock) when stock == 0 -> "在庫切れ: " + name;
case Item(var name, var stock) -> "在庫あり: " + name;
case Bundle b -> "セット: " + b.name() + "(" + b.items().size() + "点)";
}; // sealed なので default 不要
}
static String size(int stock) {
return switch (stock / 10) { // Java 14 switch 式
case 0 -> "少";
case 1, 2 -> "中";
default -> "多";
};
}
public static void main(String[] args) {
var items = new ArrayList<>(List.of( // Java 10 var
new Item("ペン", 0), new Item("ノート", 15), new Item("付箋", 42)));
var sql = """
SELECT name, stock
FROM item
WHERE stock > 0"""; // Java 15 テキストブロック
for (var i : items) System.out.println(label(i) + " / " + size(i.stock()));
System.out.println(label(new Bundle("文具セット", items)));
System.out.println(sql);
System.out.println("最後の要素: " + items.getLast()); // Java 21 SequencedCollection
System.out.println("逆順: " + items.reversed().stream().map(Item::name).toList());
}
}
実行結果(OpenJDK 21.0.10):
$ java Before8.java
在庫切れ: ペン / 少
在庫あり: ノート / 中
在庫あり: 付箋 / 多
SELECT name, stock
FROM item
WHERE stock > 0
最後の要素: Item[name=付箋, stock=42]
$ java After21.java
在庫切れ: ペン / 少
在庫あり: ノート / 中
在庫あり: 付箋 / 多
セット: 文具セット(3点)
SELECT name, stock
FROM item
WHERE stock > 0
最後の要素: Item[name=付箋, stock=42]
逆順: [付箋, ノート, ペン]
同じ結果を、Java 21 では短く、型の安全性も高く書けます。 Item の toString を書かなくても、record が同じ形式の文字列を作っています。
機能と導入バージョンの対応表
| 機能 | 正式になった版 | Java 8 風 | 新しい書き方 |
|---|---|---|---|
var |
10 | List<Item> items = ... |
var items = ... |
| テキストブロック | 15 | "...\n" + "..." |
""" で囲む |
| record | 16 | フィールド・コンストラクタ・getter・equals を手書き | record Item(String name, int stock) {} |
| switch 式 | 14 | case 0: s = "少"; break; |
case 0 -> "少"; |
| instanceof のパターンマッチ | 16 | if (o instanceof Item) { Item i = (Item) o; } |
if (o instanceof Item i) |
| sealed クラス | 17 | 継承先を制限できない | sealed interface ... permits ... |
| switch のパターンマッチ・record パターン | 21 | instanceof の連続 | case Item(var name, var stock) when ... |
| シーケンスコレクション | 21 | list.get(list.size() - 1) |
list.getLast() / list.reversed() |
| 仮想スレッド | 21 | スレッドプールの本数を調整 | Executors.newVirtualThreadPerTaskExecutor() |
record の書き方は、関連記事「Java recordの使い方|classとの違いと実行結果で学ぶ」で扱っています。switch のパターンマッチと sealed は、関連記事「Java switchパターンマッチング|record・sealedの書き方と実例」で扱っています。仮想スレッドは、関連記事「Java 仮想スレッド入門|10万タスク実測と使いどころ判断表」で扱っています。
Java 25 の新機能(JDK 25 と 21 で実行)
Java 25 では、書き始めの手間を減らす機能が正式になりました。OpenJDK 25.0.4.1 で実行し、同じコードを 21.0.10 で実行したときのエラーも並べます。
1. コンパクトソースファイルとインスタンス main(JEP 512)
// Hello25.java
// クラス宣言も public static も不要。IO.println も使える
void main() {
var items = List.of("ペン", "ノート", "付箋"); // java.base が自動 import される
IO.println("Java " + Runtime.version().feature() + " / 件数=" + items.size());
}
$ java Hello25.java # Java 25.0.4.1
Java 25 / 件数=3
$ java Hello25.java # Java 21.0.10
Hello25.java:3: error: unnamed classes are a preview feature and are disabled by default.
void main() {
^
(use --enable-preview to enable unnamed classes)
1 error
error: compilation failed
2. モジュール import 宣言(JEP 511)
import module java.base; // java.util・java.nio.file・java.time などをまとめて import
public class ModuleImport25 {
public static void main(String[] args) {
Map<String, List<Integer>> m = new TreeMap<>();
m.computeIfAbsent("在庫", k -> new ArrayList<>()).add(3);
Path p = Path.of("data", "item.csv");
System.out.println(m + " / " + p + " / " + LocalDate.of(2026, 10, 2).getDayOfWeek());
}
}
$ java ModuleImport25.java # Java 25.0.4.1
{在庫=[3]} / data/item.csv / FRIDAY
$ java ModuleImport25.java # Java 21.0.10
ModuleImport25.java:1: error: '.' expected
import module java.base; // java.util・java.nio.file・java.time などをまとめて import
^
1 error
error: compilation failed
3. 柔軟なコンストラクタ本体(JEP 513)
public class FlexibleCtor25 {
static class Item {
final String name;
Item(String name) { this.name = name; }
}
static class StockItem extends Item {
final int stock;
StockItem(String name, int stock) {
if (stock < 0) throw new IllegalArgumentException("stock は0以上: " + stock); // super の前
super(name);
this.stock = stock;
}
}
public static void main(String[] args) {
System.out.println(new StockItem("ペン", 3).stock);
try { new StockItem("ノート", -1); }
catch (IllegalArgumentException e) { System.out.println(e.getMessage()); }
}
}
$ java FlexibleCtor25.java # Java 25.0.4.1
3
stock は0以上: -1
$ java FlexibleCtor25.java # Java 21.0.10
FlexibleCtor25.java:10: error: call to super must be first statement in constructor
super(name);
^
1 error
error: compilation failed
| Java 25 の主な変更 | 内容 | コードの変更 |
|---|---|---|
| コンパクトソースファイル・インスタンス main | void main() だけで動く。学習や小さなスクリプト向け |
新しく書くときに使える |
| モジュール import | import module java.base; でパッケージをまとめて import |
任意 |
| 柔軟なコンストラクタ本体 | super(...) の前に引数チェックなどを書ける |
任意 |
| Scoped Values | スレッド間で読み取り専用の値を受け渡す(ThreadLocal の代わり) | 任意 |
| コンパクトオブジェクトヘッダ | -XX:+UseCompactObjectHeaders でヒープを節約(Java 27 で既定に) |
なし(JVM オプション) |
| AOT の改善 | 起動時間の短縮(-XX:AOTCacheOutput など) |
なし(JVM オプション) |
| 32ビット x86 版の削除 | 32ビット x86 向けのビルドがなくなった | 64ビット環境へ |
バージョンを上げるときの注意点
削除・変更された主な API とモジュール
| 版 | 変更 | 影響 | 移行先 |
|---|---|---|---|
| 9 | モジュールシステム導入、JDK 内部 API のカプセル化開始 | リフレクションで内部に触るライブラリが警告 | ライブラリの更新 |
| 11 | Java EE・CORBA モジュール削除(JAXB、JAX-WS、javax.annotation など) |
javax.xml.bind などがコンパイルできない |
Jakarta EE のライブラリを依存関係に追加 |
| 11 | JavaFX が JDK から分離 | JavaFX アプリがそのままではビルドできない | OpenJFX を依存関係に追加 |
| 15 | Nashorn(JavaScript エンジン)削除 | getEngineByName("nashorn") が null |
GraalJS、または単体版の Nashorn |
| 16〜17 | JDK 内部の強いカプセル化(--illegal-access 廃止) |
InaccessibleObjectException |
ライブラリを更新。必要なら --add-opens |
| 18 | 既定の文字コードが UTF-8 | Windows で Shift_JIS 前提のファイル読み込みの結果が変わる | 文字コードを明示する |
| 17 → 24 | SecurityManager の非推奨化 → 恒久的な無効化 | System.setSecurityManager が例外 |
OS・コンテナ側の権限管理 |
| 26 | Applet API 削除、Thread.stop() 削除 |
関連クラス・メソッドが使えない | ― |
| 27 | -noverify・-Xverify:none などのオプション削除 |
起動オプションに残っていると、起動時のエラーの原因になる | オプションを外す |
JDK 8〜25 で実行した移行時のエラー
Nashorn(Java 15 で削除):
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Nashorn {
public static void main(String[] args) {
ScriptEngine js = new ScriptEngineManager().getEngineByName("nashorn");
System.out.println("nashorn エンジン = " + js);
}
}
| JDK | 結果 |
|---|---|
| 8 | nashorn エンジン = jdk.nashorn.api.scripting.NashornScriptEngine@3c0f93f1 |
| 11 | Warning: Nashorn engine is planned to be removed from a future JDK release のあと、エンジンが返る |
| 17・21・25 | nashorn エンジン = null |
例外ではなく null が返るため、そのあとの js.eval(...) で NullPointerException になります。
JAXB(Java 11 で削除):
$ java Jaxb.java # import javax.xml.bind.JAXBContext; を含むコード。21・25 とも同じ
Jaxb.java:1: error: package javax.xml.bind does not exist
import javax.xml.bind.JAXBContext; // Java 11 で JDK から削除(JEP 320)
^
javax から jakarta への移行は、関連記事「javax.servlet does not existの直し方|jakarta移行」で扱っています。
SecurityManager(Java 17 で非推奨、Java 24 で恒久的に無効化):
public class SecMgr {
public static void main(String[] args) {
try {
System.setSecurityManager(new SecurityManager());
System.out.println("SecurityManager を設定しました");
} catch (UnsupportedOperationException e) {
System.out.println(e.getClass().getSimpleName() + ": " + e.getMessage());
}
}
}
| 実行環境 | 結果 |
|---|---|
| Java 17.0.20.1 | WARNING: System::setSecurityManager will be removed in a future release などの警告のあと SecurityManager を設定しました |
| Java 21.0.10 | UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release |
Java 21.0.10 + -Djava.security.manager=allow |
警告のあと SecurityManager を設定しました |
| Java 25.0.4.1 | UnsupportedOperationException: Setting a Security Manager is not supported |
Java 25.0.4.1 + -Djava.security.manager=allow |
起動時に java.lang.Error: A command line option has attempted to allow or enable the Security Manager. Enabling a Security Manager is not supported. |
Java 17 は警告だけで動き、Java 18〜23 は既定で例外(オプションで有効にできる)、Java 24 以降はオプションを付けても有効にできません。 どの版でも、コンパイル時に warning: [removal] SecurityManager in java.lang has been deprecated and marked for removal が出ます。
JDK 内部へのリフレクション:8・11・17 で結果が変わる
JDK 内部の private フィールドにリフレクションで触るコード(Java 9 より前に作られたライブラリによくあります)は、版によって結果が変わります。
import java.lang.reflect.Field;
public class AddOpens {
public static void main(String[] args) throws Exception {
Field f = String.class.getDeclaredField("value"); // JDK 内部の private フィールド
f.setAccessible(true);
System.out.println("value の長さ = " + ((byte[]) f.get("abc")).length);
}
}
| JDK | 結果 |
|---|---|
| 8 | ClassCastException: [C cannot be cast to [B(Java 8 の String の中身は char[]、9 以降は byte[]) |
| 11 | WARNING: An illegal reflective access operation has occurred の警告のあと、動く |
| 17・21・25 | InaccessibleObjectException(下の出力) |
$ java AddOpens.java # Java 21.0.10
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make field private final byte[] java.lang.String.value accessible: module java.base does not "opens java.lang" to unnamed module @6591f517
at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:391)
...
$ java --add-opens java.base/java.lang=ALL-UNNAMED AddOpens.java
value の長さ = 3
Java 11 で警告だけだったコードが、Java 17 では例外になります。 11 → 17 以降に上げるときに起きやすいつまずきです。--add-opens モジュール/パッケージ=ALL-UNNAMED は一時的な回避策で、まずはライブラリを新しい版に更新します。詳しくは関連記事「InaccessibleObjectExceptionの直し方|Java 17」で扱っています。
版の上げ方の判断表
今の版から、どこへ上げるか
| 今の版 | 上げ先の目安 | 期限の目安 | 主なつまずき |
|---|---|---|---|
| Java 8 | 21 か 25(11・17 を経由せず直接も可) | 無償ビルドは2030年12月。Red Hat 通常サポートは2026年11月30日 | Java EE 削除、内部 API のカプセル化、String の内部表現 |
| Java 11 | 21 か 25 | Temurin 2027年10月、Microsoft 2027年9月 | 11 で警告だったリフレクションが 17 以降で例外 |
| Java 17 | 21 か 25 | Oracle Premier は終了。Temurin 2027年10月、Corretto 2029年10月 | SecurityManager、ライブラリの対応版 |
| Java 21 | 25 | Oracle JDK の無償更新は2026年9月で終了。OpenJDK ビルドは2028〜2030年 | 25 で増えた警告、削除されたオプション |
| Java 25 | 当面そのまま。次は29(2027年9月予定) | 2030年9月以降 | ― |
| Java 26・27(非LTS) | 次の版へ6か月ごとに上げる | 27 は2027年3月(Corretto 4月) | 上げ続ける体制が要る |
状況別の選び方
| 状況 | 選ぶ版 | 理由 |
|---|---|---|
| これから学ぶ・新しく作る | Java 25 | 最新 LTS。Oracle Premier 2030年9月、Temurin 少なくとも2031年9月 |
| 使うフレームワークが 25 にまだ対応していない | Java 21 | 主要なライブラリの対応が進んでいる LTS |
| Oracle JDK 21 を無償で本番に使っている | Oracle JDK 25 か OpenJDK ビルドの 21 | 2026年10月の更新から OTN ライセンスの予定 |
| 長く同じ版を使い続けたい | Java 25 + 長期の配布元 | Corretto 2032年10月、Red Hat ELS-1・Azul 2033年9月 |
| 最新の言語機能を試したい | Java 27(非LTS) | 次の版(28)が出るまでの約6か月が更新期間 |
| Valhalla の値クラスを試したい | Java 28 の早期アクセス版 | JEP 401 は Java 28 の対象(プレビュー) |
判断に迷うときの目安は「LTS の中で一番新しく、使うライブラリが対応している版」です。 更新期間が長く、新機能も使えます。Spring Boot を使っている場合、Spring Boot 4 の移行手順は関連記事「Spring Boot 4移行の手順|3から4の変更点一覧とチェックリスト」で扱っています。
上げるときの手順
| 手順 | やること |
|---|---|
| 1. 依存関係を確かめる | Spring Boot・Lombok・Mockito・ビルドツールなどが移行先の Java に対応した版か |
| 2. 内部 API の利用を調べる | jdeps --jdk-internals アプリ.jar で JDK 内部 API の利用箇所を一覧にする |
| 3. 削除された API を探す | jdeprscan --release 25 アプリ.jar で非推奨・削除予定の API を検出する |
| 4. ビルド設定を更新する | Maven:<maven.compiler.release>25</maven.compiler.release>、Gradle:Toolchains で languageVersion = JavaLanguageVersion.of(25) |
| 5. テストを両方の版で回す | CI で現行版と移行先の版を並行して実行する |
| 6. 起動オプションを見直す | 削除・名前が変わった JVM オプション(-Djdk.tracePinnedThreads、Java 27 の -Xverify:none など)を外す |
| 7. 文字コード・GC の違いを確かめる | UTF-8 既定化(18)、既定 GC の変化(27 で G1 が全環境の既定)をログで確かめる |
| 8. 本番の JDK の版を記録する | release ファイルの JAVA_VERSION と IMPLEMENTOR を控え、期限を管理する |
JVM オプションの一覧は、関連記事「JVMオプション一覧|Xmx・Xms・GCログ設定をJava 21対応で」で扱っています。
よくある質問
Q. Java の最新バージョンはいくつですか? A. 2026年10月16日時点の最新版は Java 27(2026年9月15日リリース、非LTS)、最新の LTS は Java 25(2025年9月16日リリース)です。次は Java 28(2027年3月予定)、次の LTS は Java 29(2027年9月予定)です。
Q. Java の LTS のバージョンはどれですか? A. 8・11・17・21・25 です。 2021年以降は2年ごとで、次は29です。Java 26・27・28 は非LTS です。
Q. Java 8 のサポート期限はいつまでですか? A. Oracle Extended Support・Eclipse Temurin・Amazon Corretto・Azul はいずれも2030年12月までです。Red Hat の通常サポートは2026年11月30日で終わり、ELS-1(追加契約)は2032年12月31日までです。Microsoft は Java 8 のビルドを出しておらず、Temurin を案内しています。
Q. Java 17 のサポート期限はいつまでですか? A. 配布元で違います。 Oracle の Premier Support は2026年9月で終わり、Extended Support(有償)は2029年9月までです。Temurin は少なくとも2027年10月、Corretto は2029年10月、Microsoft は2027年9月、Red Hat の通常サポートは2027年12月31日、Azul は2029年9月までです。
Q. Java 21 のサポート期限はいつまでですか? A. Oracle の Premier Support は2028年9月、Extended Support は2031年9月です。Temurin は少なくとも2029年12月、Corretto は2030年10月、Microsoft は2028年9月、Red Hat の通常サポートは2029年12月31日、Azul は2031年9月までです。ただし Oracle JDK 21 の無償(NFTC)での更新は2026年9月で終わっています。
Q. OpenJDK のサポート期限はいつまでですか? A. OpenJDK のビルドを出している配布元ごとに決まっています。 jdk.java.net の Oracle の OpenJDK ビルドは約6か月だけ更新されます。Temurin・Corretto などは LTS を数年間更新します(上の表)。
Q. Java 27 と Java 28 は LTS ですか? A. どちらも非LTS です。 Java 27 の更新は Oracle で2027年3月まで、Java 28 は2027年3月リリース予定で、更新は2027年9月までの予定です。
Q. Java 29 はいつ出ますか? A. Oracle のロードマップでは2027年9月の予定で、LTS です。Oracle の Premier Support は2032年9月、Extended Support は2035年9月までの予定です。
Q. 自分の Java のバージョンはどう確かめますか?
A. java -version を実行します。 JDK 9 以降は java --version も使えます。PATH の java と JAVA_HOME が違う JDK を指すことがあるので、ビルドで使う版は "$JAVA_HOME/bin/java" -version か、JDK フォルダの release ファイルで確かめます。
Q. 非LTS のバージョンを本番で使えますか? A. 使えますが、約6か月ごとに次の版へ上げ続ける前提になります。更新を短い間隔で回せる体制があれば最新機能を早く使え、そうでなければ LTS を選ぶのが一般的です。
まとめ
- 最新版は Java 27(2026年9月15日)、最新 LTS は Java 25。次は Java 28(2027年3月予定)、次の LTS は Java 29(2027年9月予定)。
- LTS は 8・11・17・21・25。サポート期限は配布元で違う。Java 17 は Oracle Premier が2026年9月で終了、Corretto は2029年10月まで。
- Java 11 は Temurin・Microsoft で2027年に終わり、Java 8(2030年12月)より早い。 Red Hat の Java 8 通常サポートは2026年11月30日まで。
- Oracle JDK 21 の無償(NFTC)更新は2026年9月で終了。2026年10月の更新から OTN の予定。無償で更新を続けるなら Oracle JDK 25 か OpenJDK ビルドへ。
- Java 28 には値クラス(JEP 401、プレビュー)や Simple JSON API(JEP 540)が対象として報じられている。確定は2026年12月の機能凍結のとき。
- 版の確かめ方は
java -version、JAVA_HOME、releaseファイル。 JDK 8 には--versionがなく、releaseファイルがないパッケージもある。 - 移行では Java EE・Nashorn の削除、強いカプセル化(11 の警告が 17 で例外)、SecurityManager の無効化に注意する。
参考・出典
確認日はいずれも 2026年10月16日です。
- Oracle Java SE Support Roadmap:https://www.oracle.com/java/technologies/java-se-support-roadmap.html
- Oracle JDK 27 Release Notes:https://www.oracle.com/java/technologies/javase/27-relnote-issues.html
- Oracle JDK 26 Release Notes:https://www.oracle.com/java/technologies/javase/26-relnote-issues.html
- OpenJDK JDK Project(各 JDK のリリース日):https://openjdk.org/projects/jdk/
- OpenJDK JDK 25:https://openjdk.org/projects/jdk/25/
- OpenJDK JDK 24:https://openjdk.org/projects/jdk/24/
- OpenJDK JDK 21:https://openjdk.org/projects/jdk/21/
- OpenJDK JDK 27:https://openjdk.org/projects/jdk/27/
- OpenJDK JDK 28:https://openjdk.org/projects/jdk/28/
- InfoQ「JDK 27 and JDK 28: What We Know So Far」:https://www.infoq.com/news/2026/08/java-27-so-far/
- InfoQ「Java 27 Released」:https://www.infoq.com/news/2026/09/java27-released/
- Eclipse Adoptium(Temurin)Support:https://adoptium.net/support/
- Amazon Corretto FAQs:https://aws.amazon.com/corretto/faqs/
- Microsoft Learn「Support roadmap for the Microsoft Build of OpenJDK」:https://learn.microsoft.com/en-us/java/openjdk/support
- Red Hat「OpenJDK Life Cycle and Support Policy」:https://access.redhat.com/articles/1299013
- Azul Support Roadmap:https://www.azul.com/products/azul-support-roadmap/
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Javaバージョン一覧【2026年】LTSのサポート期限とJava 27・28」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。