Java Weekly #5:JDK 28がコアクラス30種でValue Class互換性警告を開始、AOTキャッシュが多段反復トレーニングに対応、ZGCの起動が40%高速化

Java · Weekly #5

Java Weekly #5:JDK 28がコアクラス30種でValue Class互換性警告を開始、AOTキャッシュが多段反復トレーニングに対応、ZGCの起動が40%高速化

javaJava週刊ValhallaAOTコンパイルガベージコレクション

データソース:GitHub Releases + 官方博客 + HN

📦 リリース動向

安定版の現状と開発ブランチの最適化

公式の最新安定リリースは OpenJDK JDK 27.0.1.0.3 GA Release Builds(2026年10月24日リリース、完全ビルド識別子 27.0.1.0.3+1)です。公式アップデート一覧を確認したところ、過去7日間に新規パッチはありませんでした。Java 27のデフォルトコンパクトオブジェクトヘッダーや構造化並行性などの機能詳細については、以前の解説記事 Java 27詳解 をご参照ください。

開発ブランチのJDK 28はアーリーアクセス段階にあり、最新の公開ビルドは Build 21(2026年10月22日リリース)です。今週のメインブランチ(jdk/jdk)の進化は、AOTの多段階サポートと低レベルのマイクロアーキテクチャベクトル加速に焦点を当てています:

プラットフォームバージョン / コンポーネント変更日主な変更メカニズム本番環境への影響
OpenJDK JDK 27.0.1.0.32026-10-24IANA 2026eタイムゾーンを読み込み、侵害されたeMudhra/Comodo AAAルート証明書を削除(JDK-8395690)偽造証明書チェーンのリスクを排除。現在のベースラインは2026年11月17日の次期CPUパッチまで継続。
JDK 28 Early-Access (Build 21)2026-10-22Windows TCPループバック特権の非推奨化、jlink --security-properties プラグインの追加軽量イメージパッケージング段階でセキュリティパラメータを静的に固定可能にし、コンテナ内での平文マウントオーバーヘッドを排除。
メインブランチ AOT インフラ2026-10-30PR #31344(JDK-8353598)をマージ。-XX:AOTCache の多段階反復入出力に対応フレームワークと業務層のAOTキャッシュを疎結合化し、Spring BootやQuarkusをベースイメージとした多層スタックに対応。
x86 CRC32 ベクトル加速2026-10-30PR #33342(JDK-8394259)をマージ。非AVX-512環境でAVX2とバレットリダクションを併用8バイトテーブル参照の逐次依存を解消。32バイト〜1024バイトのデータブロック計算スループットが20.3%〜34.3%向上。

確認したところ、現在のJDK 28はJEP 401(値オブジェクト)、JEP 540(軽量JSON API)、JEP 543(構造化並行性)、JEP 544(AOTマシンコードコンパイル)、JEP 545(ZGC高速ウォームアップ)、JEP 546(ZGC適応型ヒープ)などのコアプロポーザルを確定させており、技術ロードマップは文法機能からランタイムリソースの再設計へと大きく舵を切っています。


📝 深層レポート

1. JDK 28 品質プレビュー警告:JDK コアクラス 30 種が Value Class へ移行、破壊的変更テスト開始

  • 何が起きたか:10月27日、OpenJDK品質グループリードのNicolai Parlog氏がテスト警告を公開しました。JEP 401(Value Objects)がJDK 28のプレビュー機能として確定したことに伴い、プレビューを有効化すると、JDK組み込みの30個の標準クラスが直接値クラス(Value Class)に変換されます。これには java.lang 配下の8大基本ラッパークラスと Record、Optional 系統の全4クラス、ならびに LocalDate や Instant など16個の日時クラスが含まれます。
  • なぜ重要か:値クラスへの移行によってオブジェクトの同一性(アイデンティティ)が完全に排除されます。プレビューを有効化したコードでは直接的な振る舞いの変化が生じます:== 演算子がフィールドごとの値比較に変更(個別にインスタンス化した同一日時のオブジェクトで == が false から true へ変化)、値オブジェクトがモニターロックを喪失し synchronized や wait() の呼び出しで即座に IdentityException がスロー、WeakHashMap が値オブジェクトの受け入れを拒否、リフレクションによる setAccessible(true) での強制代入が IllegalAccessException をスロー、Recordのコンストラクタでフィールド代入前に this を公開することが厳格に禁止されます。
  • 誰に影響するか:特定のオブジェクトアドレス比較に依存している、プリミティブラッパークラスや日付オブジェクトでロックを取得している、あるいはシリアライズでprivateフィールドにリフレクションで無理やりアクセスしているフレームワークや業務システムのメンテナー。

2. OpenJDK メインブランチに階層型反復 AOT トレーニングがマージ(PR #31344):フレームワークとアプリキャッシュを分離

  • 何が起きたか:10月30日、HotSpotコアアーキテクトのIoi Lam氏がPR #31344(JDK-8353598)をメインブランチにマージしました。これまでJVMが生成するAOTキャッシュは1回限りの完結した処理であり、トレーニング段階で既存の -XX:AOTCache を渡すとエラーとなっていました。新実装では、ベースキャッシュを入力として複数回の増分トレーニングを実行できるようになりました:java -XX:AOTCache=base.aot -XX:AOTCacheOutput=app.aot -cp App.jar MyApp。
  • なぜ重要か:AOTキャッシュをモジュールとして再利用できないというエンジニアリング上の障壁を打破しました。マイクロサービスアーキテクチャにおいて、Spring Bootなどのフレームワークには膨大なクラスロードとインライン化ロジックが含まれており、単一の業務トレーニングでフレームワークのパスを完全に網羅することは難しく、毎回フルレコーディングを行うとCIが著しく遅延していました。反復トレーニングにより、プラットフォームチームがフレームワークのベースキャッシュ(共通ディスパッチやシリアライズのメタデータを内蔵)を事前に作成し、業務ビルド段階ではそのベースをロードしてアプリ固有のパスのみを記録できるため、コールドスタートのウォームアップ経路を大幅に短縮できます。
  • 誰に影響するか:標準化されたコンテナベースイメージ、クラウドネイティブJavaマイクロサービスのビルドパイプライン、Serverless起動最適化を担当するプラットフォームアーキテクト。

3. ZGC ウォームアップと適応型ヒープのプロポーザルが JDK 28 で確定(JEP 545 / JEP 546):デフォルトヒープを 2MB に縮小

  • 何が起きたか:10月下旬、OpenJDK公式はJEP 545とJEP 546を正式にJDK 28へ統合しました。JEP 545はZGCのデフォルト初期ヒープを2MBへと大幅に縮小し、2MBの粗粒度物理ページ単位で積極的な増分拡張を行うように変更しました。JEP 546が導入したコンテナ近隣認識適応型チューニング(-XX:+ZAdaptiveHeapSizing)と組み合わせることで、静的パラメータでメモリを事前確保する従来の運用モデルを刷新します。
  • なぜ重要か:低遅延GCが起動時のスループットにおいて抱えていたトレードオフのジレンマを解消します。従来の本番環境では -Xms と -XX:+AlwaysPreTouch を設定することが一般的でしたが、32GBのヒープインスタンスでは割り当て段階だけで10秒以上を要していました。一方、小さなヒープで起動すると、実行時に4KBの微小粒度でOSに頻繁にメモリを要求するためウォームアップ期間が長期化していました。JEP 545の実測では、ベースラインサービスの起動時間が約40%短縮され、ピークスループットに達するウォームアップ時間は約90%短縮されました。JEP 546は抽象指標 ZGCIntensity を導入し、システムの負荷に応じてGCスレッドがヒープ領域を動的に伸縮させます。
  • 誰に影響するか:Kubernetesクラスタ上でJavaインスタンスを高密度に混在稼働させ、静的メモリチューニングや起動時のウォームアップ遅延に悩まされてきたシステムエンジニアやSRE。

4. x86 アーキテクチャ CRC32 インラインアセンブリの再設計(PR #33342):バレットリダクションでスループット 34.3% 向上

  • 何が起きたか:10月30日、OpenJDKはPR #33342(JDK-8394259)をマージしました。AVX-512非対応のx86ハードウェア環境向けに、kernel_crc32 の末尾リダクションアルゴリズムを書き直し、AVX2ベクトルフォールディングとバレットリダクション(Barrett reduction)により従来の8バイトテーブル参照逐次ロジックを置き換えました。
  • なぜ重要か:データ依存によるCPUパイプラインストールを根絶しました。以前の非AVX-512パスでは、64ビットへフォールディングした後にバイト単位でテーブル参照を実行する必要があり、8回の逐次メモリアクセスと5回のベクトルレジスタから汎用レジスタへのデータ移動が発生していました。新パッチは定数 K_128_64 と K_64_32 を導入し、vpclmulqdq とキャリーレス乗算を組み合わせることでベクトルレジスタ内部で上位32ビットを直接相殺します。Intel Xeon 6980Pの実測では、32バイトデータブロックの処理レートが34.3%向上(14,586から19,589 ops/msへ)、64バイトで31.6%向上、128バイトで27.8%向上、256バイトで25.9%向上、512バイトで23.7%向上しました。
  • 誰に影響するか:大容量ネットワークパケットのアンパックやフレームチェックサムの計算を頻繁に行うRPCフレームワーク(gRPC、Nettyなど)、分散メッセージキュー(Kafkaなど)、高性能ストレージエンジンの開発者。

🔥 コミュニティの話題

1. XPipe が Java AOT Cache 配布の落とし穴を暴露:AdapterBlob の CPU 互換モード欠如による SIGILL 発生

  • 注目度指標:オープンソースツールXPipeの開発チームが技術解説記事を公開。Hacker Newsで91 points、44 comments(50242509)を記録。
  • 事実の経緯:XPipeチームは配布ソフトウェアにおいてJDK 25+で導入されたAOT Cache(-XX:+AOTClassLinking)の有効化を試みました。しかし、キャッシュ内部にはJDK-8350209で導入されたアダプタコードブロック(AdapterBlob:インタープリタ実行とコンパイル済みコードの間のトランポリン)が埋め込まれていることが判明しました。これらのマシンコードはビルドトレーニングマシンのCPU命令セット(AVX-512など)に合わせて生成されます。その命令セットを持たない古いハードウェア(第12世代Intel Coreやクラウド仮想マシンなど)へ配布された場合、JVM起動時に即座に SIGILL (0x4)(不正命令例外)でクラッシュし、フォールバックや自動縮退の仕組みが存在しませんでした。
  • 主な論点:
    • サーバー管理環境重視派:HotSpotエンジニアやクラウドネイティブ開発者は、AOT Cacheの主目的がデータセンターコンテナ内での超高速起動であり、ビルド環境と実行ノードは基本的に同構であると主張します。サーバー環境ではCIビルドクラスタと実行ノードで同一の命令セットベースラインを担保すればクラスロードやウォームアップスキップの絶大な恩恵を享受できるため、異種CPU間での汎用バイナリ配布の責務までAOTに過度に求めるべきではないという立場です。
    • クロスプラットフォーム・異種ハードウェア互換派:デスクトップおよびハイブリッドクラウド開発者は、近年のインフラ環境には異種ハードウェアが溢れており、パブリッククラウドもバックグラウンドで異なる世代のホストへVMを移行させることがあると指摘します。GraalVM Native Imageは性能と互換性を両立する -march=compatibility フラグを提供しているのに対し、HotSpot AOT Cacheはホスト固有のマシンコードをデフォルトで生成し、検証フラグもないため、クライアント配布や本番環境の混在運用において潜在的なクラッシュリスクを孕んでいると批判しています。

2. 証明書フィンガープリントブラックリストの突破:Sonatype が署名再エンコードによる回避脆弱性と cacerts 完全削除を公表

  • 注目度指標:Sonatype Research Labsが脆弱性検証レポートを公開。OpenJDK公式も緊急ガイダンス(openjdk.org/emudhra)を同時掲載。
  • 事実の経緯:10月中旬のeMudhra中間証明書秘密鍵漏洩インシデントに対し、従来の防御手法の多くは blocked.certs に対象証明書のSHA-256フィンガープリントを追記する方式を採用していました。Sonatypeチームは、デジタル証明書がASN.1エンコーディング規則に準拠しているため、ECDSA署名に生来の可鍛性(Signature Malleability)が存在することを実証しました。攻撃者は秘密鍵を持たなくても、署名値 s を合同な n - s に変換するか、RSA証明書の非重要バイトを微調整するだけで、SHA-256ハッシュを変化させつつルート証明書チェーンの検証を通過する正当な証明書を生成でき、ブラックリストを容易にすり抜けることができます。
  • 主な論点:
    • ルート証明書の物理的失効派:セキュリティ専門家とOpenJDK公式は、証明書に複数の正当なバイナリ表現が存在する以上、特定のバイト列ハッシュに依存した静的ブラックリストには根本的な欠陥があるという見解で一致しています。中間認証局(CA)が侵害された場合、根本的な解決策は基本キーストア(cacerts)から対応するルート証明書を物理的に削除すること(JDK-8395690でのeMudhraおよびComodo AAAの排除など)であり、既存のエンタープライズ顧客の接続性が一時的に損なわれるとしても不可避であると判断されています。
    • 動的公開鍵検証派:企業のインフラ運用担当者やアーキテクトは、ルート証明書の物理削除は対応が後手に回ると考えています。Javaは現代のブラウザPKIシステムやLinuxで進行中の汎用失効標準に学び、検証ロジックを「証明書バイナリのフィンガープリント」から「サブジェクト公開鍵情報(SPKI)のハッシュ」へ転換するか、基盤層でOCSP StaplingやCRL動的検証を統合し、セキュリティ事故のたびに世界中のJVMを停止してベースイメージを更新せざるを得ない受動的状況を脱却すべきだと主張しています。

🔭 来週の注目ポイント

  1. 2026年11月17日のクリティカルパッチアップデート(CPU)周期の接近:公式セキュリティベースラインにより、JDK 27.0.1.0.3の推奨運用期間は11月17日までと明示されています。eMudhra失効インシデントがミドルウェアエコシステム全体に波及する中、来週には主要ディストリビューションベンダー(Eclipse Temurin、Amazon Corretto、Azul Zuluなど)が第4四半期CPUパッチの統合テスト最終段階に入ります。コンテナイメージのローリングアップデート計画を事前に策定しておく必要があります。
  2. JDK 28 プロポーザル確定とビルドの進展:JDK 28ブランチはJEP 545、JEP 546、JEP 544といった一連のスループットおよびウォームアップ機能の統合を完了し、来週はJEP 535(Shenandoahのデフォルト世代別モード)の統合状況を評価する予定です。低遅延GCの進化に引き続き注目が集まります。