本稿ではJavaプラットフォームの基準であるスタンダード版のメジャーバージョン履歴を説明する。その他にもエンタープライズ版、マイクロ版、カード版といった周辺エディションが存在し、それぞれが個別にメジャーバージョン改訂を行っているが、いずれもスタンダード版改訂を基準にしそれに後発する時系列でリリースされている。
バージョン一覧
JDK 1.0 (1996年1月23日)
Javaプラットフォームの初回バージョンは、ブランド名「Java」プロダクト名「Development Kit」からプロパー名「Java Development Kit」とネーミングされ通称は「JDK」とされた。当初のメジャーバージョン値は小数点第一位にされた。通称にバージョン値を付けたものがリリース名になった。まだ国際化対応はされず英語版のみだった[1]。
- ファイル入出力
- ネットワーク接続(TCPソケットとUDPソケット)
- データコレクション(Array、Vector、List、Set、Map)
- 数学演算
- アプレットとセキュリティ
- 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」になった。ここからコードネームが付けられるようになった[2]。翌年にエンタープライズ版「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」
ここからメジャーバージョンのコードネームは鳥獣名、マイナーバージョンは昆虫名にするのが慣例になった[3][4]。
J2SE 1.4 (2002年2月6日)「Merlin」
このバージョンからJavaコミュニティプロセス(Java Community Process)による仕様策定が開始された[5][6][7]。
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」
メジャーバージョン値が整数部分に変更された。言語仕様に大幅な拡張が加えられた[8][9]。メモリモデル改善でマルチスレッドも軽量化した。他エディションは「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環境インストール高速化)を搭載[10]
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日)
ここでコードネームが廃止された[11]。長期サポート(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回定期リリース制に変更された[12]。従来の長期サポート(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にて仕様規定[13]。ここから追加要素の大半は、標準機能相当のJSR(仕様要求)ではなく、拡張機能扱いのJEP(改善提案)になった。試作段階の機能がお試し用として追加されるようになった。
- ローカル変数の型推論
- ルート証明書
- Unicode language-tag extensions(Unicode言語タグの操作)
- ガーベジコレクタ・インターフェース(各種ガーベジコレクタの共存連携操作)
- G1(shorter-response-timeガーベジコレクタ)用パラレル機能
- ZGC(low-latencyガーベジコレクタ)第1回試作
Java SE 11 (2018年9月25日)
JSR 384にて仕様規定[14]。Java開発環境として「Oracle JDK」と「OpenJDK」の二つが提供されるようになり、前者の商用利用は有償長期サポート(LTS)契約を結んだ顧客のみになった。Java EEのアップグレードがエクリプス財団による「Jakarta EE」に移譲されたので、JDKにEnterprise版連携モジュールが含まれなくなった。CORBAモジュールも外された。Java FXも取り除かれた。このバージョンは長期サポート(LTS)対象にされているが、上述の通り有償LTSである。
- 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にて仕様規定。
Java SE 16 (2021年3月16日)
JSR 391にて仕様規定[15]。
Java SE 17 (2021年9月14日)
JSR 392にて仕様規定[16]。
Java SE 18 (2022年3月22日)
JSR 393にて仕様規定[17]。
Java SE 19 (2022年9月20日)
JSR 394にて仕様規定[18]。
Java SE 20 (2023年3月21日)
JSR 395にて仕様規定[19]。
Java SE 21 (2023年9月19日)
JSR 396にて仕様規定[20]。
Java SE 22 (2024年3月19日)
JSR 397にて仕様規定[21]。
Java SE 23 (2024年9月17日)
JSR 398にて仕様規定[22]。
概要
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にバックポートするなど)。
Java 11、17、21は、現在サポートされている長期サポート(LTS)バージョン(「オラクルの顧客は、Oracle Premier Supportを提供される」)である。オラクルは、「レガシー」Java 8 LTSについて、商用利用向けには2019年1月に最後の無料の「パブリック・アップデート」をリリースしたが、それ以外の場合は、少なくとも2020年12月までは、個人利用向けのパブリック・アップデートでJava 8をサポートする[23]。Java 10は以前サポートされていたラピッドリリース版である。Java 10のサポートは、Java 11のサポートが開始されたのと同じ日、2018年9月に終了した。Java 7はパブリックサポートが終了し、Java 9はJava 10と現在のJava 11に取って代わられた短期のラピッドリリース版であったため、アップデートの受信が停止している。Java 11以降については、長期的なアップデートはオラクルが無償で提供するものではなく、より広範なOpenJDKコミュニティが作業を行うことが期待されている[24]。
Java 21の一般提供は2023年9月19日に行われた[25]。
各版リリース日/サポート期限一覧
バージョン
|
リリース日
|
無料公開アップデート期限[26][27]
|
延長サポート期限 (Oracleによる有償)[26]
|
サポート終了:JDK Beta |
1995 |
? |
?
|
サポート終了:JDK 1.0 |
1996年1月 |
? |
?
|
サポート終了:JDK 1.1 |
1997年2月 |
? |
?
|
サポート終了:J2SE 1.2 |
1998年12月 |
? |
?
|
サポート終了:J2SE 1.3 |
2000年5月 |
? |
?
|
サポート終了:J2SE 1.4 |
2002年2月 |
2008年10月 |
2013年2月
|
サポート終了:J2SE 5.0 |
2004年9月 |
2009年11月 |
2015年4月
|
サポート終了:Java SE 6 |
2006年12月 |
2013年4月 |
2018年12月
|
サポート終了:Java SE 7 |
2011年7月 |
2015年4月 |
2022年7月
|
サポート中:Java SE 8 (LTS) |
2014年3月 |
Oracle(商用) |
2019年1月まで |
2030年12月
|
Oracle(個人用) |
無期限
|
Eclipse Temurin |
最短で2026年11月[28]
|
Red Hat |
2026年11月[29]
|
Amazon Corretto |
2026年7月[30]
|
Azul Zulu |
2030年12月[31]
|
サポート終了:Java SE 9 |
2017年9月 |
Oracle |
2018年3月 |
—
|
サポート終了:Java SE 10 |
2018年3月 |
Oracle |
2018年9月 |
—
|
サポート中:Java SE 11 (LTS) |
2018年9月 |
Oracle OpenJDK |
2019年9月 |
2032年1月
|
Eclipse Temurin |
最短で2027年10月[28]
|
Red Hat |
2024年10月[29]
|
Amazon Corretto |
2027年10月[30]
|
Azul Zulu |
2032年1月[31]
|
サポート終了:Java SE 12 |
2019年3月 |
Oracle OpenJDK |
2019年9月 |
—
|
サポート終了:Java SE 13 |
2019年9月 |
Oracle OpenJDK |
2020年3月 |
—
|
サポート終了:Java SE 14 |
2020年3月 |
Oracle OpenJDK |
2020年9月 |
—
|
サポート終了:Java SE 15 |
2020年9月 |
Oracle OpenJDK |
2021年3月 |
—
|
サポート終了:Java SE 16 |
2021年3月 |
Oracle OpenJDK |
2021年9月 |
—
|
サポート中:Java SE 17 (LTS) |
2021年9月 |
Oracle OpenJDK |
2026年9月 |
2029年9月
|
Eclipse Temurin |
最短で2027年10月[28]
|
Red Hat |
2027年10月[29]
|
Amazon Corretto |
2029年10月[30]
|
Azul Zulu |
2029年9月[31]
|
サポート終了:Java SE 18 |
2022年3月 |
Oracle OpenJDK |
2022年9月 |
—
|
サポート終了:Java SE 19 |
2022年9月 |
Oracle OpenJDK |
2023年3月 |
—
|
サポート終了:Java SE 20 |
2023年3月 |
Oracle OpenJDK |
2023年9月 |
—
|
サポート中:Java SE 21(LTS) |
2023年9月 |
Oracle OpenJDK |
2028年9月 |
2031年9月
|
Eclipse Temurin |
最短で2029年12月[28]
|
Red Hat |
2029年12月[29]
|
Amazon Corretto |
2030年10月[30]
|
Azul Zulu |
2031年9月[31]
|
サポート終了:Java SE 22 |
2024年3月 |
Oracle OpenJDK |
2024年9月 |
—
|
現行バージョン:Java SE 23 |
2024年9月 |
Oracle OpenJDK |
2025年3月 |
—
|
将来のリリース:Java SE 24 |
2025年3月 |
Oracle OpenJDK |
2025年9月 |
—
|
凡例 サポート終了 サポート中 現行バージョン 最新プレビュー版 将来のリリース
|
脚注
外部リンク