本稿ではJavaプラットフォームの基準であるスタンダード版(Java SE)のメジャーバージョン履歴を説明する。Java Cardの仕様はJava SEとは独立してリリースされている。
Java 8まで存在した、エンタープライズ版、マイクロ版はスタンダード版改訂を基準にしそれに後発する時系列でリリースされていた。詳細はそれぞれの項目を参照。
概要 Java言語では、JDK1.0以降、標準ライブラリにクラスやパッケージが多数追加されただけでなく、いくつかの変更が行われてきた。J2SE 1.4以降、Java言語の進化は、Java Community Process (JCP)によって管理されてきた。このプロセスでは、Java Specification Requests(JSR)を使用してJavaプラットフォームへの追加や変更を提案・指定している。言語はJava言語仕様書(JLS)によって規定されており、JLSへの変更はJSR 901によって管理されている。
言語の変更に加えて、Javaクラスライブラリにも長年にわたって変更が加えられ、JDK 1.0の数百クラスからJ2SE 5では3,000クラスを超えるまでに成長した。 SwingやJava2Dなどの全く新しいAPIが導入され、オリジナルのJDK 1.0のクラスやメソッドの多くが非推奨となっている。いくつかのプログラムでは、JavaプログラムをJavaプラットフォームのあるバージョンから古いバージョンに変換することができる(例えば、Java 5.0を1.4にバックポートするなど)。
OpenJDK は Java 9 以降は半年ごとに3月と9月にリリースしている。Java 8 と Java 11に加えて、2021年以降は奇数の年の9月にリリースされるもの(Java 17, 21, 25, …)を長期サポート版(LTS)にしている。
OpenJDK の長期サポート版は様々な組織がディストリビューションとして配布していて、詳細は OpenJDK を参照。Java 8 は Oracle JDK と OpenJDK に差があったが、Java 11 以降は差がなく、Oracle JDK は OpenJDK のディストリビューションの1つとなっている。
Oracle JDK は Java 8, 11, 17 に関しては、商用と非商用・開発用でライセンスが異なり、それぞれ個別のサポート期限がある。Oracle JDK 21 以降はその区分はなくなり、リリース後3年間は無償で使用可能なライセンスが存在し、その後5年間は有償契約が必須となる。
バージョン一覧 JDK 1.0 (1996年1月23日) Javaプラットフォームの初回バージョンは、ブランド名「Java」プロダクト名「Development Kit」からプロパー名「Java Development Kit」とネーミングされ通称は「JDK」とされた。当初のメジャーバージョン値は小数点第一位にされた。通称にバージョン値を付けたものがリリース名になった。まだ国際化対応はされず英語版のみだった。最初のα版は1995年5月23日にリリースされた。
ファイル入出力 ネットワーク接続(TCPソケットとUDPソケット) データコレクション(配列、、、) 数学演算 アプレットとセキュリティ Abstract Window Toolkit(グラフィカルユーザーインターフェースサポート)
JDK 1.1 (1997年2月19日) 国際化対応され日本語版も追加された。
リフレクション(クラスメタデータ操作API) Java Text(文章、暦、日付、数値などの国別書式) Input Method Framework(文章入力の国別書式) Java 2D(グラフィックサポート)
J2SE 1.2 (1998年12月8日)「Playground」 大幅な技術刷新によりブランド名が「Java 2」に改められた。統合仕様の確立でプロダクト名が「Platform」に改められた。エディションの分化で「Standard」が付加された。こうしてプロパー名「Java 2 Platform, Standard Edition」通称「J2SE」になった。ここからコードネームが付けられるようになった。翌年にエンタープライズ版「J2EE 1.2」とマイクロ版「J2ME 1.2」もリリースされた。
strictfpキーワード(言語仕様、浮動小数点計算) 仮想マシンに実行時コンパイラ(Just-In-Time Compiler) Javaプラグイン(WEBブラウザへのアプレット実行環境挿入) Swing(グラフィックユーザーインターフェース) Collection Framework(コレクションAPI) Security Framework(セキュリティAPI) Java Internet Description Language(IDLからJava CORBA用スタブ&スケルトンを生成) Java Accessibility API(画面Reader、音声認識、点字端末などのユーザー補助機能)
J2SE 1.3 (2000年5月8日)「Kestrel」 ここからメジャーバージョンのコードネームは鳥獣名、マイナーバージョンは昆虫名にするのが慣例になった。
仮想マシンにHotSpotエンジン(動的再コンパイル技術と世代別ガベージコレクション) Java Platform Debugger Architecture(デバッガ・アーキテクチャ) Java Name and Directory Interface(ネーミング&ディレクトリサービスAPI) RMI over IIOP(RMIをIIOPプロトコル上でも使える仕様) Java Sound(サウンドAPI)
J2SE 1.4 (2002年2月6日)「Merlin」 このバージョンからJavaコミュニティプロセス(Java Community Process)による仕様策定が開始されたJSR 59。
assert キーワード(言語仕様、デバッグ用ディレクティブ、任意条件でプログラム中断) Java Web Start 正規表現用API ロギング用API New I/O(非遮断ストリーム入出力、バッファストリームAPI) Image I/O(JPEGとPNGを使えるAPI) Preferences(ツリー型のJava式セーブデータ収納庫API) Java API for XML Processing(XMLパーサ&マニュピレータAPI、XSLTフォーマットAPI) Java Cryptography Extension(暗号化API) Java Secure Socket Extension(TLS / SSL用API) Java Authentication and Authorization Service(認証&権限サービスAPI)
J2SE 5.0 (2004年9月30日)「Tiger」 メジャーバージョン値が整数部分に変更された。言語仕様に大幅な拡張が加えられた 。メモリモデル改善でマルチスレッドも軽量化した。他エディションは「J2EE 1.4」「J2ME 1.4」のままだった。この頃に「Java Card Platform」がエディション昇格し、バージョンは独自式のまま「Java Card 2.2」でリリースされた。
ジェネリクス(パラメトリック多相を付加したデータコンテナクラス→ List<T>) オートボクシング(ボックス化、プリミティブ値とラッパーインスタンスの自動変換) 列挙型(enumキーワードで定数クラスを定義) 可変長引数(引数欄の型名に3連ドットで配列渡しと解釈される→ void drawText(String... lines)) アノテーション(@キーワードでクラスメタデータに注釈タグと注釈コメントを埋め込むアドホック多相) 拡張for文(対象リストのイテレータ表現式になるfor文) 静的インポート文(クラス静的メンバのフルパスをimportで指定できる) Java Management Extensions(MBeanを用いた依存性の注入による実行プログラムの動的再構成の最適化)
Java SE 6 (2006年12月11日)「Mustang」 ブランド名が「Java 2」から「Java」に戻されてプロパー名「Java Platform, Standard Edition」となり、通称が「J2SE」から「Java SE」になった。バージョン値から小数点以下が外された。なおマイナーバージョン更新では再び小数点以下が付けられた。他エディションも「Java EE 5」「Java ME 5」になった。仮想マシンを含めた既存機能の改善と洗練に力が注がれた。
ジェネリクスの拡張。他言語のジェネリックプログラミングと同等に整備した。 Scripting for the Java Platform(スクリプト言語との連携サポート) Java Architecture for XML Binding(Java XMLアーキテクチャ) Java API for XML Web Services(WEB向けのXML) Java Compiler API(Javaコンパイラへのディレクティブに特化したAPI) Unicode正規化 API 差し込みアノテーション(インスタンス別、クラス派生別にアノテーションを埋め込めるアドホック多相) Swingの高速化、Windows用ルック&フィールの追加、Windowsタスクトレイ表示 Update10で、Java Quick Starter(アプリ起動高速化)Java Kernel(Java環境インストール高速化)を搭載
Java SE 7 (2011年7月28日)「Dolphin」 サン社を買収したオラクル社による初のメジャーバージョンリリースである。
invoke_dynamic API(クラスインスタンスとメソッドシグネチャの組み換えによる動的ディスパッチ) New File I/O Library(新しいファイル入出力ライブラリ) Concurrency Library(並行処理API) 暗号化APIに楕円曲線暗号を導入 ネットワークAPIにStream Control TransmissionプロトコルとSockets Directプロトコルを導入 グラフィック関連の強化。Update2でJavaFXの導入
Java SE 8 (2014年3月18日) ここでコードネームが廃止されたJSR 337: Java SE 8 Release Contents。長期サポート(LTS)リリース制度下の最終版である。
言語仕様にラムダ式の導入(引数 → 関数式) 言語仕様にメソッド参照の導入 関数型インターフェース(引数と返値をテンプレート化できるパラメトリック多相) Stream API(コレクションコンテナ各要素への連続的なラムダ式適用) JavaScriptのコードを埋め込めるNashorn Javaスクリプトエンジンの搭載(Project Nashorn) 型アノテーション(@interfaceで構造体化したアノテーションを定義、複数の注釈フィールドを持つ) 反復アノテーション(バックグラウンドタスクのクラスをアドホック多相で任意日時稼働にスケジュールする) Date and Time API(日付時刻) 静的結合 Java Native Interface ライブラリ
Java SE 9 (2017年9月21日) ここからメジャーバージョンは一定の新機能蓄積を待たずに公開する毎年3月と9月の年2回定期リリース制に変更された。従来の長期サポート(LTS)が無くなり、原則的に半年間サポートになった。
従来のパッケージ(package)の上にモジュール(module)を追加(Project Jigsaw) 言語仕様の細かな拡張(Project Coin) 並行処理ライブラリの拡張 Compact Stringの追加 「JShell」の搭載。コンソール形式でJavaコードを入力し実行結果を確認できる 「The Java Linker」の搭載。ユーザー環境に最適なモジュールと仮想マシンモードを自動選択実行する 仮想マシンに前方コンパイル(Ahead-Of-Time Compilation)の導入 XML catalogs(永続的URLへのマッピング) HiDPI Graphicsの導入(画像拡大縮小の改善) G1(shorter-response-timeガーベジコレクタ)
Java SE 10 (2018年3月20日) JSR 383にて仕様規定JSR 383: Java™ SE 10 (18.3)。ここから追加要素の大半は、標準機能相当のJSR(仕様要求)ではなく、拡張機能扱いのJEP(改善提案)になった。試作段階の機能がお試し用として追加されるようになった。
ローカル変数の型推論 ルート証明書 Unicode language-tag extensions(Unicode言語タグの操作) ガーベジコレクタ・インターフェース(各種ガーベジコレクタの共存連携操作) G1(shorter-response-timeガーベジコレクタ)用パラレル機能 ZGC(low-latencyガーベジコレクタ)第1回試作
Java SE 11 (2018年9月25日) JSR 384にて仕様規定JSR 384: JavaTM SE 11 (18.9)。 Java Development Kit として Oracle JDK と OpenJDK の二つが提供されるようになった。ソースコードは同一であり、サポートに差がある。Oracle JDKの開発目的以外の商用利用は有償長期サポート(LTS)契約を結ぶ必要があり、長期サポート(LTS)対象にされているが、有償LTSである。OpenJDK の方はサポートが無いが無償で利用可能である。 Java Runtime Environment が廃止され、JRE を OS にインストールするのではなく、アプリケーションごとに OpenJDK のサブセットを同梱配布する方法が推奨されることとなった。 JavaアプレットとJava Web Startを廃止。JRE廃止と同じ考え方である。 Java EEのアップグレードがエクリプス財団によるJakarta EEに移譲されたので、JDKにEnterprise版連携モジュールが含まれなくなった。CORBAモジュールも外された。 Java FX が取り除かれた。 Dynamic class-file constants(拡張invoke_dynamic、クラスローディングによるクラス静的メンバの動的バインディング) ラムダ式の引数の型推論 HTTPクライアント実装用API Flight recorder(Javaプログラム実行トレース用の軽快な各種データ収集フレームワーク) Unicode 10.0.0のサポート ZGC(low-latencyガーベジコレクタ)第2回試作
Java SE 12 (2019年3月19日) JSR 386にて仕様規定。アップデートで令和改元に向けたセキュリティ対策が施された。
switch文をパターンマッチング 式スタイルに拡張・第1回試作 JVM Constants API(クラスローディングに関連した仮想マシン内のクラス定数プールの操作) G1(shorter-response-timeガーベジコレクタ)用コレクション中断機能 G1(shorter-response-timeガーベジコレクタ)用不要メモリ返却機能 ZGC(low-latencyガーベジコレクタ)第3回試作 Shenandoah(low-pause-timeガベージコレクタ)第1回試作
Java SE 13(2019年9月17日) JSR 388にて仕様規定。「数百の小粒改良、数千のバグ修正」と宣伝された。
ソケットAPIの改良実装 switch文をパターンマッチング 式スタイルに拡張・第2回試作 Text Blocks(文字列リテラルの複数行記述可能)第1回試作 ZGC(low-latencyガーベジコレクタ)第4回試作
Java SE 14(2020年3月17日) JSR 389にて仕様規定。「数百の小粒改良、数千のバグ修正」と宣伝された。
Recordクラス(不変フィールド、標準アクセッサ、標準構築子を持つイミュータブルオブジェクト)第1回試作 instanceofパターンマッチング(if文のinstanceof判定で代入変数も同時定義できる糖衣構文)第1回試作 switch文をパターンマッチング 式スタイルに拡張・第3回試作 Text Blocks(文字列リテラル の複数行記述可能)第2回試作 Foreign-Memory Access API (仮想マシンの外部メモリにも安全にアクセスできる)第1回試作 ZGC(low-latencyガーベジコレクタ)第5回試作
Java SE 15(2020年9月15日) JSR 390にて仕様規定。
JEP-339:Edwards-Curve デジタル署名アルゴリズム JEP-360:Sealedクラス・第1回試作(サブクラスを事前定義で固定化したクラス。オブジェクトの非交和=直和構造を表わす) JEP-371:Hiddenクラス(フレームワーク内限定の隠されたクラス。モンキーパッチなどに応用できる) JEP-373:データグラム・ソケットAPIの改良実装 JEP-375:instanceofパターンマッチング・第2回試作 JEP-377:ZGC(low-latencyガーベジコレクタ)第6回試作 JEP-378:Text Blocks・第3回試作 JEP-379:Shenandoah(low-pause-timeガベージコレクタ)第2回試作 JEP-383:Foreign-Memory Access API・第2回試作 JEP-384:Recordクラス・第2回試作(フィールドを不変にしたクラス。オブジェクトの直積構造を表わす)
Java SE 16 (2021年3月16日) JSR 391にて仕様規定オラクル、Java 16を発表。
JEP 338: ベクトルAPI JEP 347: C++14言語機能の有効化 JEP 357: MercurialからGitへの移行 JEP 369: GitHubへの移行 JEP 376: ZGC:並列スレッドスタック処理 JEP 380: UNIXドメイン・ソケット・チャネル JEP 386: Alpine Linuxポート JEP 387: Elastic Metaspace JEP 388: Windows/Aarch64ポート JEP 389: 外部リンカーAPI JEP 390: 値ベース・クラスの警告 JEP 392: パッケージング・ツール JEP 393: 外部メモリ・アクセスAPI JEP 394: instanceofのパターン・マッチング JEP 395: Records JEP 396: JDK internalをデフォルトで強固にカプセル化 JEP 397: シールド・クラス(第2プビュー)
Java SE 17 (2021年9月14日) JSR 392にて仕様規定オラクル、Java 17をリリース。
JEP 306: Always-Strict Floating-Point セマンティクスのリストア JEP 356: 疑似乱数ジェネレーターの強化 JEP 382: 新しいmacOSレンダリング・パイプライン JEP 391: macOS AArch64 Port JEP 398: Applet APIの廃止 JEP 403: JDK内部の強力なカプセル化 JEP 406: スイッチのパターン・マッチング(プレビュー) JEP 407: RMIアクティベーションの削除 JEP 409: シール・クラス JEP 410: 試験的AOTおよびJITコンパイラの削除 JEP 411: Security Managerの削除に向けた非推奨 JEP 412: 外部関数およびメモリAPI(インキュベーター) JEP 414: ベクトルAPI(セカンド・インキュベーター)
Java SE 18 (2022年3月22日) JSR 393にて仕様規定オラクル、Java 18を発表。
JEP 400: UTF-8(デフォルト) JEP 408: Simple Web Server JEP 413: Java APIドキュメントのEPコード・スニペット JEP 416: メソッド・ハンドルによるCore Reflectionの再実装 JEP 417: Vector API(第3インキュベータ) JEP 418: インターネット・アドレス解決SPI JEP 419: 外部関数・メモリAPI(第2インキュベータ) JEP 420: Switchのパターン・マッチング(第2プレビュー) JEP 421: ファイナライズを非推奨とし削除に備える
Java SE 19 (2022年9月20日) JSR 394にて仕様規定オラクル、Java 19をリリース。
JEP 405: レコード・パターン(プレビュー) JEP 422: Linux/RISC-V への移植 JEP 424: 外部関数・メモリAPI(プレビュー) JEP 425: 仮想スレッド(プレビュー) JEP 426: ベクトルAPI(第4インキュベーター) JEP 427: switchのパターン・マッチング(第3プレビュー) JEP 428: 構造化された並行性(インキュベーター)
Java SE 20 (2023年3月21日) JSR 395にて仕様規定オラクル、Java 20をリリース。
JEP 429: スコープ値(インキュベータ) JEP 432: レコード・パターン(第2プレビュー) JEP 433: Pattern Matching for Switch(第4プレビュー) JEP 434: Foreign Function & Memory API(第2プレビュー) JEP 436: 仮想スレッド(第2プレビュー) JEP 437: 構造化された並行性(第2インキュベーター) JEP 438: ベクトルAPI(第5インキュベーター)
Java SE 21 (2023年9月19日) JSR 396にて仕様規定オラクル、Java 21のリリースとサポート・ロードマップの延長を発表。
JEP 430: 文字列テンプレート(プレビュー) JEP 434: Foreign Function & Memory API(第3プレビュー) JEP 439: 世代別ZGC JEP 440: レコード・パターン(第3プレビュー) JEP 441: Pattern Matching for Switch JEP 443: 無名のパターンと変数(プレビュー) JEP 444: 仮想スレッド JEP 445: 無名のクラスとインスタンス・メイン・メソッド(プレビュー) JEP 446: スコープ値(プレビュー) JEP 448: Vector API(第6インキュベーター) JEP 453: 構造化された並行性(プレビュー)
Java SE 22 (2024年3月19日) JSR 397にて仕様規定オラクル、Java 22をリリース。
JEP 423: G1領域の固定 JEP 447:super(...)の前の文(プレビュー) JEP 454: Foreign Function & Memory API JEP 456: 無名変数とパターン JEP 457: Class-File API (プレビュー) JEP 458: マルチファイル・ソース・コード・プログラムの起動 JEP 459: 文字列テンプレート(第2プレビュー) JEP 460: Vector API(第7インキュベーター) JEP 461: Stream Gatherers (プレビュー) JEP 462: 構造化された並行性 (第2プレビュー) JEP 463: 暗黙的に宣言されたクラスとインスタンスのメイン・メソッド(第2プレビュー) JEP 464: スコープ値(第2プレビュー)
Java SE 23 (2024年9月17日) JSR 398にて仕様規定オラクル、Java 23をリリース。
JEP 455: プリミティブ型のパターン、instanceof、switch(プレビュー) JEP 466: Class-File API (第2プレビュー) JEP 467: Markdownドキュメント・コメント JEP 469: Vector API(第8インキュベーター) JEP 471: sun.misc.unsafeのメモリアクセス・メソッドを削除を予定した非推奨に設定 JEP 473: Stream Gatherers (第2プレビュー) JEP 474: ZGC: 世代別モードのデフォルト化 JEP 476: モジュール・インポート宣言(プレビュー) JEP 477: 暗黙的に宣言されたクラスとインスタンスのメイン・メソッド(第3プレビュー) JEP 480: 構造化された並行性 (第3プレビュー) JEP 481: スコープ値(第3プレビュー) JEP 482: 柔軟なコンストラクタ本体(第2プレビュー)
Java SE 24 (2025年3月18日) JSR 399にて仕様規定オラクル、Java 24をリリース。
JEP 404: 世代別Shenandoah (試験段階) JEP 450: コンパクトなオブジェクト・ヘッダー (試験段階) JEP 475: G1の遅延バリア機能の拡張 JEP 478: キー導出関数API (プレビュー) JEP 479: Windows 32ビットx86ポートの削除 JEP 483: 事前クラス・ローディングおよびリンク JEP 484: Class-File API JEP 485: Stream Gatherers (第2プレビュー) JEP 487: スコープ値(第4プレビュー) JEP 488: プリミティブ型のパターン、instanceof、switch (第2プレビュー) JEP 489: Vector API(第9インキュベーター) JEP 490: ZGC: 非世代別モードの削除 JEP 491: ピン留めなしで仮想スレッドを同期 JEP 492: 柔軟なコンストラクタ本体 (第3プレビュー) JEP 493: JMODなしのランタイム・イメージのリンク JEP 494: モジュール・インポート宣言(第2プレビュー) JEP 495: シンプルなソースファイルとインスタンスのmainメソッド (第4プレビュー) JEP 496: 量子耐性のあるモジュールlatticeベースのキー・カプセル化メカニズム JEP 497: 量子耐性のあるモジュールlatticeベースのデジタル署名アルゴリズム JEP 499: 構造化された並行性 (第4プレビュー) JEP 501: 32ビットx86ポートの非推奨と削除
Java SE 25 (2025年9月16日) JSR 400にて仕様規定オラクル、Java 25をリリース。
JEP 470: 暗号化オブジェクトのPEMエンコーディング(プレビュー) JEP 502: 安定値(プレビュー) JEP 505: 構造化された並行性(第5プレビュー) JEP 506: スコープ値 JEP 507: プリミティブ型のパターン、instanceof、switch(第3プレビュー) JEP 508: Vector API(第10インキュベーター) JEP 509: JFR CPU時間プロファイリング(試験段階) JEP 510: キー導出関数API JEP 511: モジュール・インポート宣言 JEP 512: コンパクトなソースファイルとインスタンスのmainメソッド JEP 513: 柔軟なコンストラクタ本体 JEP 514: 事前実行によるコマンドラインの利便性