プロジェクト・ヴァルハッラ解説:10 年分の成果が JDK 28 に集約する方法

2026/06/19 15:35

プロジェクト・ヴァルハッラ解説:10 年分の成果が JDK 28 に集約する方法

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

はい、改訂版が必要です。 元稿は良好ですが、Key Points List に含まれている特定の数量的データや技術的制限を欠いており、以下にそれらの不足部分を補いながら読流を保つ見直された要約を示します。

改訂された要約

6 月 15 日、Oracle のエンジニア Lois Foltan は、Project Valhalla(JEP 401)が今後の JDK 28 リリース向けに OpenJDK に統合されたと確認した。この大幅なアップデートは、伝統的なオブジェクトの可読性とプリミティブ型の高いパフォーマンスを融合させ、現代のハードウェア上で CPU がメインメモリ速度を大きく上回る中、分散された参照型の種類による歴史的なメモリの非効率性を直接的に解消することを目的としている。現在はデフォルトで無効化されており

--enable-preview
で有効化されるプレビュー機能として提供されている JDK 28 は、「バリュークラス」(以前はバリュータイプと呼ばれていた)を導入し、ヒープフラットニング(heap flattening) とスカラー化を利用してデータを平坦配列に格納することで「メモリのふっくらしさ」を減少させる。この統合には 1,816 ファイルにわたる計 197,000 行以上のコードが含まれている。

Brian Goetz が「Valhalla の第一の部分に過ぎない」と述べるように、JDK 28 はバリュークラスが参照型として残され NULL になることが可能で、まだ型消去のため特別.genericコレクション(例えば

List<int>
)をまだサポートしていないという基線を確立している。非 Nullable な型と特別 generic への完全な安定化は今後のリリース、特に 2027 年 9 月の予定されている次期 LTS バージョン(JDK 29)に向けたものとして期待されている。注目すべき点は、Java チームが以前の命名規則や「エスケープ解析」などの最適化を撤回しており、これらは新しいデータ局所性のアプローチと比較してあまりにも脆弱であると考えられたという点だ。開発者にとってこのシフトは、デフォルトの等値チェック(
==
)が同一性を検証する代わりに置換可能性を検証するようになり(同期ブロックが
IdentityException
をスローさせる)、直ちな導入にはレガシーな最適化ヒントに依存している人々にとっては調整が必要となることを意味する。

本文

Java 業界の歴史を覆す JEP 401「Value Classes」:JDK 28 で実現される「ヴァレハラ(Valhalla)」

6 月 15 日、Oracle エンジニアのロイス・フォルトン氏により、事実上の合意が JDK への公式統合が確定したことが発表されました。JEP 401(Value Classes and Objects)がメインの OpenJDK リポジトリに追加され、JDK 28 を目標とした開発を開始します。

  • 規模は巨大: プレビュー機能として承認されており、デフォルトでは無効化されています(
    --enable-preview
    フラグが必要)。
  • コミットの差し控え: 統合中のコミッターに対して、大規模なコミットが一時保留されるよう要請されました。
  • 変更の範囲: シングルな Pull Request で、1,816 ファイルを横断し 197,000 行以上のコードが追加されました。
  • 現状の立ち位置: ブライアン・ゴーツ氏はこれを「ヴァレハラの最初の部分に過ぎない」と述べており、完全に shipping(製品版としてリリース)されるのは将来的な話です。

なぜこの変更が必要なのか:Java の根本的な問題

プリミティブとオブジェクトの二項対立

  • Java ではすべてのデータが参照型であり、プリミティブ型(int, long 等)とは異なるメモリ管理を行います。
    • 例:
      Point p = new Point(1, 2)
      と書いた場合、
      p
      は点そのものではなく、ヒープ上のオブジェクトへの**ポインタ(住所)**です。
  • 問題となるのはスケール:
    • 各オブジェクトにはヘッダー(型情報や同期状況など、約 12 バイトのメタデータ)が存在します。
    • ガベージコレクション(GC)の負荷がヒープ上の「散らばった箱」の数に比例して増加します。
  • 「ふっくらした」メモリ配置: ブライアン・ゴーツ氏が形容する、密度が高くキャッシュ効率的でない状態です。

ハードウェア進化とのギャップ

  • CPU 演算速度はメインメモリの約 2 桁上回っており、キャッシュがボトルネックになっています。
  • プロセッサはデータを読み取る際、64 バイトのキャッシュライン単位で動作します。
  • 参照の局所性の欠如: ポインタ経由での間接参照は、キャッシュミスを招きやすく、ヒットした場合と比べて約 100 倍遅い可能性があります。

エスケープ分析の限界

  • JIT コンパイラがエスケープ分析を用いてオブジェクトをローカルに展開(スカラー化)する仕組みがありますが、これには弱点があります。
    • 予測不可能: アライメントやガベージコレクションのコストは、コンパイル時の最適化状況に依存するため不安定です。
    • 脆弱性: コードの単純なリファクタリングや JDK 更新により、再びヒープ上のオブジェクト扱いに戻り、パフォーマンスが低下するリスクがあります。

プロジェクトヴァレハラの進化史:12 年間の試行錯誤

プロジェクトは 2014 年に開始され、「クラスのようにコードし、int のように動作する」という目標を掲げてきました。数々のプロトタイプが死滅した道のりがありました。

用語とモデルの変遷

  • 第 1 段階:value types:概念の初期段階。プリミティブ型と全く別の「生き物」として扱うアプローチでした。
  • 第 2 段階:inline classes(2019-2020 年):
    • クラスを「アイデンティティを持つもの(Identity Classes)」と「アイデンティティを持たないもの(Inline Classes)」に分けました。
    • スローガン「クラスのようにコードし、int のように動作する」が確立されました。
  • 第 3 段階:"primitive classes"および二重射影モデル
    • 一つの型が
      Value Variant
      (プリミティブ風)と
      Reference Variant
      (null を許容するボックス)の 2 つの状態を持つモデルでした。
    • メリットがあったものの、プログラマが常に両方の形式を理解する必要があり、メンタルコストが高すぎると判断されました。
  • 第 4 段階(現在):Value Classes と Value Objects
    • 複雑な二元論を捨て、以下の 2 つの独立した概念に分解しました。
      1. アイデンティティの有無 (
        value
        modifier で宣言されたクラスは Identity を持たない)
      2. null の許容性 (非 null 制限は別の JEP に分離され、JDK 28 では未実装)

コードの歴史に残る教訓

「コードを書く」ことではなく、「アイデアを拒否し続けることで残るのが本質」である 12 年間でした。

  • Universal Generics(汎用ジェネリクス): 取り下げられ、Specialized Generics に再考されました。
  • 「primitive classes」の名前: オープン JDK の典範としてはもはや使用されず、現在は「Value Classes」と呼ばれます。

JEP 401 の具体的な機能と動作

宣言と定義的特徴

value
modifier を付与することで Value Class を作成できます。

value class USDCurrency implements Comparable<USDCurrency> {
    private int cents; // 暗黙的に final
    public USDCurrency(int dollars, int cents) {
        this.cents = dollars * 100 + cents;
    }

    public USDCurrency plus(USDCurrency that) {
        return new USDCurrency(0, this.cents + that.cents);
    }
}

制約事項

  • アイデンティティなし:
    new Point(1,2)
    と作成した 2 つのオブジェクトは、「内容が同じ」だけでなく「同一」とみなされます。
  • Final の強制: 全てのフィールドは暗黙的に
    final
    、クラス自体もデフォルトで
    final
    です。
  • メソッド制約: メソッドは
    synchronized
    を使用できません(IdentityException を投げるため)。
  • 継承と実装: アイデンティティを持つクラスからの継承は不可ですが、インターフェースの実装は可能です。

重要な概念:スカラー化(Scalarization)とヒープフラットニング

JVM に Value Objects の最適化を許容する 2 つの方法があります。

  1. スカラー化 (Scalarization):
    • JIT コンパイラによる手法。Value Object の参照が「素因数分解」され、ポインタ不要のフィールドセットとして処理されます。
    • 効果: 割り当てと GC のコストが発生せず、エスケープ分析以上の範囲で機能します。
  2. ヒープフラットニング (Heap Flattening):
    • オブジェクトがメモリ上の別の場所へのポインタを持たず、アレイセルに直接書き込まれます。
    • 効果: データ密度とキャッシュ効率の最大化(参照の局所性の向上)。

注意: 完全にフラット化するには原子性が必要です。将来的には 128 ビットエンコーディングや非 atomic な保証を放棄した型も登場する可能性があります。

プリミティブ型への統合

  • プレビュー機能で有効な場合、
    Integer
    ,
    Long
    ,
    Double
    などのラッパークラス自体が Value Class
    となります。
  • これにより、
    Integer[]
    List<int>
    のような構造を、従来のオブジェクトとは異なる効率的なメモリ配置(フラット化)として扱うようになります。

バランスの取れた抽象化

  • メリット: プリミティブ型の密度とクラスの可読性の両方を得ることができます。
    • 例:
      Color
      クラスを持たず、
      r
      ,
      g
      ,
      b
      の 3 バイトを持つように記述できますが、名前やメソッドで記述できるため誤解を防げます。
  • デメリット: デフォルトでは null を許容するため(別途 JEP で対応)、厳密な null 安全性を得たい場合は追加のステップが必要です。

ジェネリクスとコレクションへの適用課題

Java のジェネリクスは「タイプ消去」により実装されているため、

List<Point>
のようなコンテナには Value Object を直接格納できません。

ロードマップ:Universal Generics vs Specialized Generics

  • 第 1 フェーズ:Universal Generics (言語レベル)
    • 型変数が Value Types も含むことを可能にしますが、依然としてタイプ消去を通じた実装です。
    • プログラムは「null ポリューション」の警告を受け、API の専門化(specialization)準備が求められます。
  • 第 2 フェーズ:Specialized Generics (JVM レベル)
    • コンテナ自体を Value Types で裏付け、
      ArrayList<Point>
      を本当にフラットなメモリ構造として実装します。
    • 現状: まだ研究・開発段階であり、JDK 28 には完全導入されていません。

まとめ:なぜこれが歴史的大変革なのか

「アイデンティティ」前提の転換

1995 年以来、「すべてのオブジェクトはアイデンティティを持つ」という Java の根幹が揺らぎます。プログラマに選択肢を与えることは、単なる機能追加ではなく基礎のシフトです。

プレビューと将来性

  • JDK 28 (目標): Value Classes と Objects の基本機能(スカラー化、フラットニング)の実装。
    • LTS リリースではないため、次期 LTS は JDK 29 です。
    • --enable-preview
      フラグが必要です。
  • 将来の拡張: 非 null タイプ、完全な Specialized Generics、128 ビットエンコーディングなどは、JDK 28 以降に順次実装が予定されています。

アクションプラン

  • 実験的利用: 早期アクセスビルドは
    jdk.java.net/valhalla
    で入手可能です。
  • 移行戦略: データ集約型コード(ML、ゲーム、金融計算など)において、パフォーマンスを犠牲にせず密度のあるデータ構造を持つことが可能になります。
  • 注意点: エスケープ分析や Identity に依存していた既存のコードは、Behavior が変わる可能性があります(特に
    ==
    synchronized
    的使用)。

このプロジェクトが JDK の進化を加速させ、抽象化と性能の両立を達成する鍵となることは間違いありません。

同じ日のほかのニュース

一覧に戻る →

2026/06/20 0:10

ATProto のインスタンスはありません

## Japanese Translation: 以下は、不足していた特定の詳細を統合しつつ流れを保つ改訂版です。 # 改善されたサマリー 記事は、「Bluesky インスタンス」について尋ねることがカテゴリエラーであることを明確にし、atproto がデータのホスティングとアプリケーションを根本的に分離することにより、Mastodon のような孤立した「インスタンス」という概念を排除していることを説明します。従来のモデルでは、これらの結合されたシステムが「領邦」を生み出し、インスタンス所有者がユーザーを追放できる一方、atproto においてはアイデンティティはサーバーではなくユーザーのデータに属しています。この構造により、ユーザーはソーシャルグラフへのアクセスを失うことなくホスティングプロバイダーを即座に切り替えるか、自動的にデータを移行することが可能になります。エコシステムはまたアプリの独立性を育みます; ユーザーは特定のクライアントに依存するのではなく、「Tangled」や「Semble」などのさまざまなアプリケーション間で切り替えたり、著者が言及したプロジェクトのようなカスタムオープンソースアプリを構築して任意のホストからのデータを集約したりすることができるようになります。リレーや Cloudflare などの特定のインフラストラクチャツールがこのモデルを可能にしており、データベースは孤立したアイデンティティサイロとして機能するのではなく、モデレーションの多様性またはキャッシュのために複数のコピーを実行します。したがって、業界は「インスタンス数」のような誤解を招く指標から離れ、ユーザー主体性、多様なアプリ開発、そして真のデータポータビリティによって定義されるより健全なエコシステムへと移行します。

2026/06/20 1:28

现代汽车收购波士顿动力

## Japanese Translation: 現代自動車グループは、ボストン・ダイナミクスの残りの株式 9.65%(ソフトバンク保有分)を約 11 億ドルの総評価額にて 3 億 2500 万ドルで買収し、2026 年 6 月 22 日に完了させる計画を発表しました。これによりボストン・ダイナミクスは現代自動車の完全子会社となり、ソフトバンクが保有していた行使権(put option)も終了します。現代自動車は、アトラス型ヒューマノイドロボットをその製造エコシステムへ統合することを意図しており、まず 2026 年 1 月 5 日にラスベガスで開催される CES において電気式のアトラスを実演し、その後 2028 年までにジョージア州サバnahna 附近的 EV 工場において生産モデルを立ち上げる予定(当初は部品の組立順序化に適用され、2030 年頃にはより重機業務へ拡大)です。商業的な実現可能性を確保するため、ボストン・ダイナミクスの CEO ロバート・プレイターは、アトラスが導入される前に新しい工場タスクを 1〜2 日以内に学習し、稼働率を 99.9% に達することを高い基準として設定しました。現代自動車モビスは、主要なハードウェアを一貫したグループの工業基盤と整合させるために重要なアクチュエータを生産します。競合他社がテスラのフリーモントでのオプティマスや、Figure AI の BMW との共同試験、または Unitree の低価格モデルなど「展示」に注力するのと対照的に、現代自動車は CES 会場でのデモではなく持続的な稼働時間を重視し、自社の工場を利用して制御された工場内導入を追求しており、ジョージア州のメタプラントから着手します。また、この動きはソフトバンクがボストン・ダイナミクスからの戦略的転換を図り、Roze AI へシフトすることで、単なる製品会社としての緩やかな収益曲線ではなく、物理インフラ(エネルギー・建設分野)での出資を求めていることとも反映しています。完全な所有権を確保した現代自動車は、マイノリティー株式や外部パートナーに依存するのではなく、高ボリューム製造環境におけるロボティクス未来を自社で掌握することを目指しています。

2026/06/13 17:21

音波を使ってエスプレッソを抽出。コーヒーの Brewing に必要なエネルギー使用量を 3 分の 1 に削減できる

## Japanese Translation: 研究者たちは、熱ではなく音波を用いて室温で濃厚で高い抽出強度を持つコーヒーを製造する革新的な「超音波エスプレッソ」法を成功裏に開発しました。 blind な味覚検査では、この飲料が従来のホットエスプレッソと区別不能であることを示し、芳香、風味、強度のすべてにおいて同様に優れており、熱エネルギーがクラシックなエスプレッソの特徴に必要なものではないことを証明しています。特にフィルタコーヒーとの比較において、超音波版の方が、より心地よい苦味のために参加者によって好まれるという結果となりました。この技術は、抽出時間を 3 分未満に縮めるために振動子を用いて音響カビテーション(コールドミルクのように小さな泡が生じ、コーヒー粉を破砕する現象)を生み出します。水をお湯まで加熱する必要がないため、標準的な淹れ方における高い熱エネルギー需要や、アイスドリップのような長時間 steep する必要性に対応し、最大 75% も少ないエネルギーを使用します。得られる濃縮液は強力かつ滑らかであるため、ボトル入り飲料、乳成分を含む飲料、または即席飲料製品での即時消費に最適です。もし工業的な生産が効果的にスケールすれば、この手法は品質を損なうことなく運営コストを大幅に削減し、炭素排出量を減らすことができ、世界中のコーヒー業界を持続可能な道筋を提供しつつ、消費者の満足度も保つことができるでしょう。

プロジェクト・ヴァルハッラ解説:10 年分の成果が JDK 28 に集約する方法 | そっか~ニュース