出来事の日付:2026年6月19日。
OpenJDKのProject Valhallaは、10年以上にわたる開発を経て重要な提供段階に近づいており、JEP 401「Value Classes and Objects」がJDK 28の対象となっている。JVM Weeklyによると、オラクルのエンジニア、ロイス・フォルタンが6月15日に統合計画を確認した。この変更はデフォルトで無効化されたプレビュー機能として導入される見通しで、より広範なValhalla計画の最初の部分にすぎない。
統合の規模は、この作業がJavaのランタイムにいかに深く及ぶかを反映している。JVM Weeklyによると、プルリクエストでは1,816ファイルにわたり19万7,000行以上が追加され、統合中はほかの大規模コミットが一時的に控えられた。プレビューという位置付けは、開発者が試用できる一方、この機能がまだ言語および仮想マシンの最終的かつ恒久的にサポートされる一部ではないことを意味する。
Valhallaの長年の目標は、型をクラスのように記述しながら、`int`に近い形で動作させることだとしばしば要約される。現在、Java開発者は多くの構造化データについて、8つの組み込みプリミティブ型と参照型のいずれかを選択する。通常のオブジェクトは一般にアイデンティティーとメタデータを持ち、ヒープ領域を占有し、参照を通じてアクセスされる。そのため、小さなオブジェクトの大規模なコレクションでは、割り当て、ガベージコレクション、ポインターの間接参照に伴うコストが増加し得る。
高密度な表現が重要なのは、関連する値がメモリー上でまとまって配置されると、現代のプロセッサーが恩恵を受けるためだ。近接した場所に詰め込まれたデータはキャッシュラインをより有効に活用できる一方、分散したオブジェクトでは追加のメモリー参照が必要になる。JITコンパイラーはエスケープ解析によって割り当てを排除できる場合があるが、その最適化は、オブジェクトがローカルにとどまるとコンパイラーが証明できるかどうかに左右される。オブジェクトをフィールドや配列に格納したり、コンパイラーが完全には解析できないコードへ渡したりすると、最適化が妨げられる可能性がある。
性能が重視される分野のプログラマーは、構造化された情報をプリミティブ値のみで表すことで、こうしたコストを回避することが多い。これによりメモリーを節約できる一方、クラスが提供するカプセル化、命名、検証、メソッドが失われる。値クラスは、クラスに基づくプログラミングモデルを維持しつつ、アイデンティティーが不要な場合にJVMがコンパクトなレイアウトを採用する自由度を高めることで、このトレードオフを小さくすることを目指している。
この取り組みは2014年に正式に始まり、設計者が互換性とランタイム上の問題に取り組む中で、複数のプロトタイプを経てきた。JDK 28に登場しても、計画されているValhallaの全機能が提供済みになるわけではない。報道によると、Java言語の主要アーキテクトであるブライアン・ゲッツは、JEP 401が最初の部分であることを強調した。
したがってJavaユーザーにとって、直近の節目は本番システムを書き換える合図ではなく、セマンティクス、ツール、性能を試す機会となる。メインのJDKにプレビューとして導入することで、設計をはるかに幅広いフィードバックにさらすことができる。長年の研究を経て、Valhallaの課題は、概念を証明することから、Javaの既存エコシステムにいかに安全に適合できるかを示すことへと移る。



