Java8 以降の主な拡張機能まとめです。
- Java 9 (2017年9月21日)
- Java 10 (2018年3月20日)
- Java 11 (2018年9月25日)
- Java 12 (2019年3月19日)
- Java 13 (2019年9月17日)
- Java 14 (2020年3月17日)
- Java 15 (2020年9月15日)
- Java 16 (2021年3月16日)
- Java 17(2021年9月14日)
- Java 18(2022年3月22日)
- Java 19(2022年09月20日)
- Java 20(2023年03月21日)
- Java 21(2023年09月19日)
- Java 22(2024年03月19日)
- Java 23(2024年09月)
- Java 24(2025年03月)
Java 9 (2017年9月21日)
- Project Jigsaw によるモジュールシステム導入
- [JSR 376: JavaTM Platform Module System]
- 【Modern Java】Java Platform Module System (JPMS) - A Memorandum
- Gradle における Java Platform Module System (JPMS) の運用 - A Memorandum
- 不変コレクションの生成APIの追加
- JShellコマンドラインツール
- Project Coin によるいくつかの言語機能追加
- プラットフォーム・ロギング・API
Java 10 (2018年3月20日)
- ローカル変数の型推論
var
Java 11 (2018年9月25日)
- ラムダ式の引数の型推論
- 新しいHTTP Client(正式版)
- シングルJavaファイルからの即時Java実行
- Javaプログラム実行トレース用の各種データ収集フレームワーク(Flight recorder)
Java 12 (2019年3月19日)
- プレビュー機能
- switch式(Preview)
Java 13 (2019年9月17日)
- ソケットAPIの改良実装
- プレビュー機能
- switch式(Second Preview)
- 複数行の文字列リテラル(Preview)
Java 14 (2020年3月17日)
- switch式
- プレビュー機能
- インストーラ作成パッケージツール (Incubator)
- Recordクラスの導入(Preview)
- instanceof パターンマッチング(Preview)
- 複数行の文字列リテラル (Second Preview)
Java 15 (2020年9月15日)
- Hiddenクラスの導入
- 複数行の文字列リテラル
- プレビュー機能
- instanceof パターンマッチング(Second Preview)
- Sealedクラスの導入 (Preview)
Java 16 (2021年3月16日)
- Recordクラスの導入
- instanceof パターンマッチング
- インストーラ作成パッケージツール
- プレビュー機能
- Sealedクラスの導入 (Second Preview)
- ベクトル演算 API (Incubator)
Java 17(2021年9月14日)
Java 11 に続く長期サポート対象バージョン(LTS)
- Sealed クラスの導入
- JEP 409: Sealed Classes
- 継承できるクラスを制限する Sealed Class
- switch パターンマッチング
- その他
- JEP 306: Restore Always-Strict Floating-Point Semantics - 厳密な浮動小数演算(strictfp)をデフォルトに(SSE2があるため)
- JEP 356: Enhanced Pseudo-Random Number Generators -
java.util.random
パッケージ - JEP 403: Strongly Encapsulate JDK Internals - 内部APIの隠蔽が強制される
- JEP 415: Context-Specific Deserialization Filters - コンテキストに応じたデシリアライズフィルタを構成(ObjectInputFilter.Config にフィルタファクトリを登録)
- JEP 391: macOS/AArch64 Port - Apple M1チップ(AArch64)向けサポート
- JEP 382: New macOS Rendering Pipeline - Apple MetalによるグラフィックAPI対応
- プレビュー機能
- ベクトル演算 API (Second Incubator)
- 外部関数と外部メモリAPI(Incubator)
Java 18(2022年3月22日)
- UTF-8 のデフォルト化
- JEP 400:UTF-8 by Default
Dfile.encoding=COMPAT
とすると従来互換
- シンプルなWebサーバー
- JavaDoc の コードスニペット サポート
- JEP 413: Code Snippets in Java API Documentation
- {@snippet ...} として JavaDoc 中にコードを記載
- 【Modern Java】Java18で追加された Code Snippets in Java API Documentation (JEP 413) - A Memorandum
- プレビュー機能
- switch パターンマッチング (Second Preview)
- ベクトル演算 API (Third Incubator)
- 外部関数と外部メモリとの総合運用API(Second Incubator)
Java 19(2022年09月20日)
- RISC-V 命令セットアーキテクチャ(ISA)ポート
- プレビュー機能
- switch パターンマッチング (Third Preview)
- レコードクラスのパターンマッチ (Preview)
- JEP 405: Record Patterns
- レコードクラスで
instanceof
パターンマッチが可能 - JEP 427 と合わせて switch でのパターンマッチが可能となる
- 外部関数と外部メモリとの総合運用API(Preview)
- 仮想スレッド(Preview)
- ベクトル演算 API (Fourth Incubator)
- 構造化された並行性 (Incubator)
- JEP 428: Structured Concurrency
- StructuredTaskScope クラスにより並列処理を構造化
Java 20(2023年03月21日)
- プレビュー機能
- スコープド・バリュー(Incubator)
- JEP 429: Scoped Values
- 仮想スレッドで有用なスレッドローカル変数の代替
- レコードクラスのパターンマッチ(Second Preview)
- JEP 432: Record Patterns
- レコードクラスで instanceof パターンマッチが可能
- JEP 427 と合わせて switch でのパターンマッチが可能となる
- switch パターンマッチング(Fourth Preview)
- 外部関数と外部メモリとの総合運用API(Second Preview)
- 仮想スレッド(Second Preview)
- 構造化された並行性(Second Incubator)
- JEP 437: Structured Concurrency
- StructuredTaskScope クラスにより並列処理を構造化
- スコープド・バリュー(Incubator)
Java 21(2023年09月19日)
Java 17 に続く長期サポート対象バージョン(LTS)
- バーチャルスレッド
- 順序付き要素シーケンスの型追加
- レコードクラスのパターンマッチ
- switch パターンマッチ
- 32bit Windows ポートの削除
- エージェントの動的読み込みの無効化準備
- エージェント利用でワーニング出力(デフォルト無効化の準備)
- 451:Prepare to Disallow the Dynamic Loading of Agents
- 世代別ZGC
- キーカプセル化メカニズムAPI
- その他の変更点
- プレビュー機能
- 無名パターン・無名変数
_
(Preview) - 文字列テンプレート(Preview)
- 無名クラスとインスタンス・メインメソッド(Preview)
- 外部関数と外部メモリとの総合運用API(Third Preview)
- スコープド・バリュー(Preview)
- 構造化された並行性(Preview)
- ベクトル演算 API (Sixth Incubator)
- 無名パターン・無名変数
Java 22(2024年03月19日)
- 外部関数と外部メモリAPI
- 無名変数と無名パターン
- G1 のリージョン固定化
- 423:Region Pinning for G1
- ネイティブ言語との相互運用のためクリティカルオブジェクトを含む領域を固定できるようにする
- マルチファイルコードの実行
- プレビュー機能
- ベクトル演算 API (Seventh Incubator)
- 文字列テンプレート(Second Preview)
- super(...) 前のステートメント(Preview)
- 447:Statements before super(...) (Preview)
- サブクラスのコンストラクタで、
super()
が最初の呼び出しである制限を緩和
- クラスファイルAPI(Preview)
- 457:Class-File API(Preview)
- Java クラス ファイルを解析、生成、変換するための標準 API を提供
- 暗黙クラス定義とインスタンス・メインメソッド(Second Preview)
- 463:Implicitly Declared Classes and Instance Main Methods(Second Preview)
- クラス定義無く
void main() { System.out.println("Hello, World!"); }
と書ける
- 構造化された並行性(Second Preview)
- 462:Structured Concurrency (Second Preview)
- 異なるスレッドで実行されている関連タスクをグルーピングして単一の作業単位として扱う
- 文字列テンプレート(Second Preview)
- スコープド・バリュー(Second Preview)
- Stream Gatherers (Preview)
Java 23(2024年09月)
- マークダウンJavaDoc
- 世代別ZGC
- プレビュー機能
- 文字列テンプレート(取り下げられました)
- モジュールインポート(Preview)
- プリミティブタイプのパターン・instanceof・switch (Preview)
- クラスファイルAPI(Second Preview)
- 466:Class-File API(Second Preview)
- Java クラス ファイルを解析、生成、変換するための標準 API を提供
- ベクトル演算 API (Eighth Incubator)
- Stream Gatherers (Second Preview)
- 暗黙クラス定義とインスタンス・メインメソッド(Third Preview)
- 構造化された並行性(Third Preview)
- スコープド・バリュー(Third Preview)
- Flexible Constructor Bodies(Second Preview)
Java 24(2025年03月)
- Stream Gatherers
- クラスファイルAPI
- JNI の使用を制限するための準備
- 472:Prepare to Restrict the Use of JNI
- G1GCのバリア実装の変更
- ZGCの非世代別GCモード削除
- JMOD 無しのランタイムイメージリンク
- 事前(Ahead-of-Time)のクラスのロードとリンク
- Pinning なしの仮想スレッドの同期
- セキュリティマネージャの無効化
- sun.misc.Unsafe によるメモリーアクセスメソッド使用時の警告
- 32ビットx86ポート廃止
- Windows 32ビットx86ポート削除
- 耐量子モジュール格子ベースの鍵カプセル化機構
- 耐量子モジュール格子ベースのデジタル署名アルゴリズム
- コンパクトオブジェクトヘッダー(実験的)
- プリミティブタイプのパターン(Second Preview)
- 世代別シェナンドーGC(実験的)
- 鍵導出関数API
- スコープドバリュー(Fourth Preview)
- ベクターAPI(Ninth Incubator) *489:Vector API (Ninth Incubator)
- 構造化された並行性(Fourth Preview)
- 柔軟なコンストラクタ本体(Third Preview)
- モジュール・インポート宣言(Second Preview)
- シンプルなソースファイルとインスタンス・メイン・メソッド(Fourth Preview)