Java 週刊 #2:FFM ネイティブメモリプールで 18 倍高速化、構造化並行性と ZGC 動的伸縮が JDK 28 に内定

Java · Weekly #2

Java 週刊 #2:FFM ネイティブメモリプールで 18 倍高速化、構造化並行性と ZGC 動的伸縮が JDK 28 に内定

javaJava言語週刊FFM構造化並行性ZGC

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

📦 バージョン動向

公式における現在の最新安定版(General Availability)は、2026 年 9 月 15 日にリリースされた Java SE 27 (JDK 27) です。次期開発ブランチである JDK 28 は Early Access(早期アクセス)段階に入っています。

半年に一度のフィーチャーリリースとして、JDK 27 ではメモリレイアウトおよびランタイムのデフォルト挙動においていくつかの決定的な刷新が行われました:

特性番号特性名称デフォルトポリシー変更主な効果
JEP 534Compact Object Headersデフォルト有効化(64 ビットアーキテクチャ)オブジェクトヘッダーを 96 ビットから 64 ビットへ縮小、ヒープフットプリントを 15%〜20% 削減
JEP 523G1 as Default GC Everywhere全プラットフォーム・全スペックで標準化低メモリコンテナにおける Serial GC への後退を撤廃、停止時間とスループットを両立
JEP 527Post-Quantum Hybrid TLS 1.3ML-KEM ハイブリッド鍵交換を標準交渉古典的 ECDH との互換性を保ちつつ「今傍受して後で解読」する量子リスクを回避

JEP 534 の適用は、コンテナ環境において顕著なヒープ節約効果をもたらしています。大量の小規模オブジェクトや短命オブジェクトを生成する負荷において、コンパクトオブジェクトヘッダーはキャッシュラインの競合を抑え、GC サイクルを大幅に遅延させます。同時に JEP 523 により、メモリ割り当てが 2GB 未満のコンテナで Serial GC へフォールバックしていた古いルールが撤廃され、HotSpot はあらゆる構成において最適化された G1 エンジンを標準稼働させるようになりました。

移行によるメリットや実測ベンチマークの詳細は、当サイトの解説記事:Java 27 徹底解説 をご参照ください。


📝 ディープダイブ

1. FFM API にネイティブメモリ再利用プールが導入、微小割り当てのレイテンシがナノ秒級へ急減

  • 何が起きたか:10 月 5 日、OpenJDK コア開発者の Per-Åke Minborg 氏が JDK 28 に向けた外部関数・メモリ(FFM)API の大幅な性能改善を公開しました(JDK-8385697 および PR #31365)。新実装では制限アリーナ(Confined Arena)に 64 バイトのネイティブメモリプールが追加されました。Arena.ofConfined() で小さなセグメントを確保する際、JVM はスレッドキャッシュから直接メモリを切り出して再利用し、スコープを抜けると自動でゼロクリアして返却します。仮想スレッドに対しては、キャリアスレッド(Carrier Thread)から一時的にバッファを借用して即時アンバインドする機構が設計され、膨大な仮想スレッドごとに個別のネイティブキャッシュを保持する肥大化を防いでいます。
  • なぜ重要か:C 言語関数を呼び出す際の微小データによるシステムコールとロック競合が排除されます。ベンチマークによると、5 バイトのメモリ割り当てにおいて macOS AArch64 で 18.6 倍の高速化(レイテンシが 15.86 ns/op から 1.05 ns/op へ激減)、Windows x64 で 16.8 倍、Linux AArch64 で 12.3 倍の高速化を達成しました。仮想スレッド内でも 15.67 ns から 3.22 ns へと大幅短縮されています。アプリケーション側のコード変更は一切不要で、ランタイムをアップデートするだけで即座にスループット向上の恩恵を享受できます。
  • 誰に影響するか:jextract を利用してネイティブバインディングを生成しているチーム、C/C++ 動的リンクライブラリを高頻度で呼び出すシステムプログラミング開発者、ネットワークパケットのデシリアライズを担うミドルウェア開発者。

2. ZGC の起動と動的サイジングの分離:JEP 545 と JEP 546 がレビュー入り

  • 何が起きたか:10 月 7 日、HotSpot ガベージコレクションチームの Erik Österlund 氏が 2 つの関連プロポーザルを提出しました:JEP 545(Faster Startup and Warmup with ZGC)および JEP 546(Adaptive Heap Sizing for ZGC)で、公開レビュー期限は 10 月 14 日です。JEP 545 は起動時の物理メモリ確保を大きな静的割り当てからデフォルトわずか 2MB へと改め、バックグラウンドで並行して高速拡張します。JEP 546 はワークロードの負荷とホスト環境のリソース競合状況に応じてヒープサイズをリアルタイムに伸縮させる適応型アルゴリズムを導入します。
  • なぜ重要か:低遅延コレクタにおける「秒速コールドスタート」と「効率的なウォームアップ」の長年のトレードオフを解消します。以前はウォームアップ時のスループットを確保するために 32GB のヒープを事前設定すると、OS に物理ページを要求するだけで 10 秒以上を要していました。一方、初期ヒープを 2MB にすると 0.1 秒で起動できるものの、その後のシングルスレッドによる逐次的なメモリ確保で深刻な性能低下が発生していました。2 つの JEP が連携することで、HotSpot は 0.1 秒以内に最初のリクエストへ応答できるようになり、コンテナの高密度混在環境でもアイドル状態のメモリページを OS へ動的に返却して OOM Killer によるプロセス強制終了を防止します。
  • 誰に影響するか:クラウドネイティブなサーバーレス(Serverless)開発者、Kubernetes マルチテナントアーキテクト、数十 GB 規模の低遅延取引基盤を運用するインフラ担当者。

3. Loom 構造化並行性がついに正式化へ:JEP 543 が 7 回のプレビューを経て確定版に

  • 何が起きたか:Alan Bateman 氏、Viktor Klang 氏、Ron Pressler 氏が主導する JEP 543(Structured Concurrency)が 10 月 6 日、JDK 28 の確定機能(Targeted)として正式提案されました。レビュー期間は 10 月 13 日までです。JDK 21 でのプレビュー開始から 7 バージョンにわたる改良を経て、今回の提案では JDK 27 の全 API シグネチャがそのまま維持され、追加の変更なしに正式採用されます。
  • なぜ重要か:仮想スレッドエコシステムの中核的な制御プリミティブが --enable-preview オプションから完全に解放されます。StructuredTaskScope は非同期協調処理にレキシカルスコープの保証を与え、複数スレッドに分散したサブタスクを単一のアトミックな作業単位として束ねます。いずれかのサブタスクが失敗するか全体がタイムアウトした場合、スコープは自動的にキャンセルシグナルをブロードキャストして孤立スレッドのリークを防ぎ、スレッドダンプ内でも因果関係を保ったツリー構造のスタックトレースを維持します。
  • 誰に影響するか:高並行 API ゲートウェイを開発するエンジニア、仮想スレッドのライフサイクルに対応を進める主要フレームワーク(Spring Boot、Quarkus、Micronaut など)のメンテナ。

4. IBM と Red Hat が Lightwell プロジェクトを発足:オープンソース Java ライブラリの 400 件超の脆弱性をバックポート修正

  • 何が起きたか:IBM と Red Hat は 10 月 6 日、共同オープンソースセキュリティイニシアチブ「Lightwell」と依存関係審査サービス「Lightwell Clearinghouse」を発表しました。広く使われている Java オープンソースライブラリにおいて、これまで公表されていなかった 400 件以上のセキュリティ欠陥を特定・修正し、責任ある開示プロセスに従って各アップストリームへパッチを提供しました。
  • なぜ重要か:自律型 AI 侵入エージェントが複数の低リスクな脆弱性を連鎖させて複合攻撃を仕掛けるリスクを未然に防ぎます。この取り組みの最大の特徴はバックポート戦略にあります。企業のプロダクション環境で今なお稼働している旧バージョンの依存関係に対して修正パッチを直接移植することで、メジャーバージョンアップに伴う破壊的な API 変更のリスクを負うことなく、重要コードの堅牢化を即座に実現できます。
  • 誰に影響するか:金融や通信など長期運用が求められるエンタープライズのレガシー Java システムを維持するアーキテクトおよびアプリケーションセキュリティ責任者。

🔥 コミュニティの話題

1. Microsoft Brewlet 発表:コンテナイメージ不要で Kubernetes 上に Java ワークロードをスケジュール

  • データ指標:Devoxx Belgium での登壇発表;Hacker News スレッドで 10 Points、2 件のコメント。
  • 議論の焦点:Microsoft プリンシパル PM の Bruno Borges 氏がオープンソースプロジェクト「Brewlet」を発表しました。WebAssembly のノード常駐モデルに着想を得て、開発者が JAR ファイルや JPMS モジュールを直接 OCI レジストリにプッシュし、Kubernetes ノード上に常駐する JDK で直接実行できるようにする試みです。Dockerfile の記述や OS コンテナイメージのビルドが不要になります。
    • 支持派の視点:ベースイメージに起因する無数の CVE アラート疲れから解放される。配布サイズが数百 MB からビジネスロジックの数 MB〜数十 MB へと劇的に縮小し、デプロイパイプラインが大幅に簡素化される。
    • 慎重派の視点:ノード間で単一の JDK を共有することは、コンテナの「自己完結型・イミュータブルな環境」という隔離原則を崩してしまう。ホスト側 JDK のマイナーアップデートで微小なバイトコード挙動の差異が生じた場合、アプリ間の環境汚染や互換性デグレを引き起こす懸念がある。

2. Daniel Lemire 氏が Java SIMD 最適化の実践と Vector API の限界を分析

  • データ指標:Daniel Lemire 氏の技術ブログ;Hacker News スレッドで 11 Points、5 件のコメント。
  • 議論の焦点:パフォーマンス工学の権威 Daniel Lemire 氏が、Roman Snytsar 氏の新著『Mastering SIMD with Java Vector API』を取り上げた長文解説を公開しました。jdk.incubator.vector は特定アルゴリズムにおいてシングルコアのスループットを大幅に引き上げるものの、その重量級の抽象化は非対称なループ処理やメモリアライメントを跨ぐ境界アクセスにおいて CPU の構造的ハザード(Structural Hazards)を誘発しやすいと指摘しています。
    • 支持派の視点:ベクトル検索、データベースエンジン、高速数値計算などのスループット重視の領域では、最新ハードウェアの演算命令パイプラインを使い切るために手動で SIMD ロジックを記述することが不可欠である。
    • 慎重派の視点:Incubator モジュールの期間が長引いており API 変更リスクも高いため、本番業務コードに組み込む保守コストが高すぎる。大半の業務システムは JIT コンパイラによる自動ベクトル化に任せ、Project Valhalla の値オブジェクトによって低レイヤーの配列構造がフラット化されるのを待つのが堅実である。

3. Rust 製 JVM ビルドツール jrs:ミニマルな Cargo パラダイムは Maven と Gradle の牙城を崩せるか

  • データ指標:公式サイト getjrs.dev;Hacker News スレッドで 2 Points、1 件のコメント。
  • 議論の焦点:開発者の Piotr Wittchen 氏が Rust で開発された Java ビルドツール「jrs」を発表しました。単一の jrs.toml 設定ファイルと確定的な lockfile を備え、JVM コールドスタート不要の単一バイナリとして高速動作します。
    • 支持派の視点:肥大化した Maven の pom.xml やデバッグ困難な Gradle の Groovy/Kotlin DSL に辟易していた層にとって、単一の静的ファイルで依存解決とパッケージングが完結する軽快さは非常に魅力的である。
    • 慎重派の視点:jrs はプラグイン機構、マルチモジュールリアクター、複雑なビルドフックをサポートしていない。企業のモノレポや高度なコード生成パイプラインでは実用に耐えず、用途は小規模な単一モジュールプロジェクトに限定される。

📅 来週の注目トピック

  1. JEP 543(構造化並行性)レビュー終了(10 月 13 日):公開レビューが完了し JDK 28 への正式統合が確定予定。これにより Project Loom の 2 大柱(仮想スレッドと構造化並行性)がすべて正式版へ昇格します。
  2. JEP 545 および JEP 546(ZGC メモリ革新)レビュー終了(10 月 14 日):ZGC の起動速度と動的メモリ伸縮を刷新する 2 つの提案がレビューを終え、コード統合の最終フェーズに入ります。
  3. Project Valhalla EA ビルドの進展:JEP 401(Value Objects)がメインラインにマージされたことを受け、次週公開される JDK 28 EA ビルドにおける値オブジェクトのメモリ平坦化ベンチマークに注目が集まります。