Java 26が登場しました
45日前原文(hanno.codes)
概要
- Java 26がリリース、新機能は少なめだが今後の大きな進化の基盤を構築
- Project Valhalla関連JEPへの準備が進行中
- JEP 516・JEP 522などパフォーマンスやGC改善が目玉
- HTTP/3対応などコアライブラリの機能拡張
- Java 25からの主な違いや利用例も紹介
Java 26の新機能まとめ
- Java 26は新機能がやや控えめなリリース、今後の大規模アップデートのための基礎固め
- Project Valhallaに関連するJEP(特にJEP 500, 529)への布石
- 各JEPの概要、プレビュー状況、プロジェクト分類、追加機能、Java 25からの変更点を整理
Java 26で追加された主な新機能
-
JEP 516: Ahead-of-Time Object Caching with Any GC
- あらゆるGCで利用可能なAOTオブジェクトキャッシュの提供
- GC非依存フォーマットによるキャッシュ互換性向上
- ZGCや大容量ヒープ環境で特に有効
-XX:+AOTStreamableObjectsオプションで強制利用も可能- 複数GCごとのキャッシュ管理コスト削減
-
JEP 522: G1 GC: Improve Throughput by Reducing Synchronization
- G1 GCのスループット・レイテンシ改善
- アプリケーションスレッドとGCスレッド間の同期削減
- 2枚のカードテーブルを導入し、スレッド間干渉を回避
- 書き込みバリアの簡素化による追加パフォーマンス向上
- ヒープ1GBあたり約2MBの追加メモリ消費(0.2%)
-
JEP 517: HTTP/3 for the HTTP Client API
-
Java標準のHTTPクライアントAPIがHTTP/3に対応
-
QUICプロトコルによる高速通信・マルチプレクシング
-
クライアントやリクエスト単位でHTTP/3利用を明示的に指定可能
-
サーバーが未対応の場合は自動でHTTP/2やHTTP/1.1へフォールバック
-
プロトコルバージョンのネゴシエーションも自動で処理
-
サンプルコード:
var http3Client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_3).build(); var http3Request = HttpRequest.newBuilder(URI.create("https://hanno.codes")) .version(HttpClient.Version.HTTP_3) .GET().build();
-
HotSpot関連の新機能
-
JEP 516: GC非依存AOTキャッシュ
- オブジェクトのキャッシュフォーマットを論理インデックスベースに変更
- ロード時にインデックスをメモリアドレスへ変換し再構築
- ZGCや大規模ヒープ環境での起動高速化
- コマンドラインオプションによる挙動制御
-
JEP 522: 2枚のカードテーブル
- 書き込みバリアが非同期で動作し、同期コスト減
- 高頻度でオブジェクト参照が書き換わるアプリで**5〜15%**のスループット向上
- x64環境では追加で最大5%のパフォーマンス改善
Core Libs関連の新機能
- JEP 517: HTTP/3対応
- IETF標準のHTTP/3(2022年策定)、QUICベース
- Java 11以降のHTTPクライアントAPIがバージョン指定でHTTP/3利用可能に
- サーバー未対応時の自動フォールバック・プロトコルネゴシエーション
今後への布石
- Project ValhallaのJEP登場に向けた基盤整備
- Java 26の変更点は次期メジャー進化の準備段階
- 詳細や追加情報は各JEPドキュメントを参照推奨
まとめ:
- Java 26はパフォーマンス・基盤強化が中心
- HTTP/3やGC周りの改善で実務的な恩恵も大きい
- 近い将来の大型アップデートに備えた重要な一歩