世界を動かす技術を、日本語で。

Java 26が登場しました

2026年3月18日原文(hanno.codes)

概要

  • Java 26 がリリース、新機能は少なめだが今後の大きな進化の基盤を構築
  • Project Valhalla 関連JEPへの準備が進行中
  • JEP 516JEP 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クライアントAPIHTTP/3 に対応

    • QUIC プロトコルによる高速通信・マルチプレクシング

    • クライアントやリクエスト単位で HTTP/3 利用を明示的に指定可能

    • サーバーが未対応の場合は自動で HTTP/2HTTP/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周りの改善で 実務的な恩恵 も大きい
  • 近い将来の 大型アップデート に備えた重要な一歩

Hackerたちの意見

最近、Javaのグリーンスレッドの代替がカラーファンクションを使ってないって知って、ちょっと驚いた。これでJavaの評価が上がったよ。

カラーファンクションって何?

「グリーンスレッド」って、一般的にこういうシステムが「非カラーだけど非同期っぽいパフォーマンス」として認識されることが多いかな。あるいは「ファイバー」とかね。それ以外だと「非同期」や「コルーチン」って呼ばれる。

グリーンスレッドとスタックレス非同期モデル、つまりasync/awaitを混同してるんじゃない?グリーンスレッドは色付きの関数を意味するわけじゃないよ。

色付きの関数は必要ないよ。だってJavaのグリーンスレッドは色付きの関数みたいにValueじゃなくてFutureを返すから。

ただ、関数の色付けを完全には解決してないんだよね。キャリアスレッドがピン留めされるのはまだ良くないし、非同期関数からブロッキング関数を呼び出すのも、色付けされたシステムでは良くないよ。

JEP 504: Applet APIの削除 これが削除されるのは嬉しいね。特にLinuxでのJavaプラグインは最悪だったし、企業のいろんなものに必要だったから。アイスティーウェブのこと覚えてる?機能的でオープンソースのJavaプラグインとJava Webstartの実装だよ。

アイスティーウェブのこと覚えてる?いやぁ、今でもそれを使ってる環境があるよ。

昔、Webstartの企業向けアプリをいくつか作ったことがある!インフラは結構良かったけど、ちゃんと動いた時だけね。それに、当時のJSよりずっと良かったし、IE6の時代だったから。

JavaプラグインとWebStartはずいぶん前に削除されたからね。APIが削除されたのは残念だな。クラスがいくつかあるだけなのに、今でも使われてるし。GitHubでJAppletを検索してみて。現代のブラウザでもWASMを使ってアプレットを実行したり、Java IDEのプラグインとして使ったりもできるよ。

Javaの世界から何年も離れてたけど、最近Android開発の要件で戻ってきた。訴訟の後、今のAndroid(Google)とJavaの関係はどうなってるの?Androidで26が期待できるのはいつ?それにしても、なんでAndroidはいつも遅れをとってるの?Kotlinが主流だから?それとももっと深い理由があるの?訴訟も影響してる?

Javaの主要な開発はOpenJDKで行われてる。Androidは独自のランタイム(Androidランタイムって名前が付いてる)を持ってて、Javaバイトコードは動かさず、自分たちのバイナリフォーマットを使ってる。JVMクラスファイルはそのフォーマットにコンパイルできるけど、サポートはいつもOpenJDKのJavaバージョンに遅れをとってる。Kotlinがプラットフォームのデファクト言語になった理由の一部は、当時サポートされてたJavaがすごく古くて、ラムダもなかったからなんだ。問題は、ほとんどのJavaライブラリがデスクトップ/サーバー、つまりOpenJDKのシーンに従いたがるけど、それだとAndroidと互換性がなくなるから、サポートするバージョンを上げるインセンティブがあったりするんだよね。

Hacker Newsで議論の続きを見る