Project Valhalla
Javaのオブジェクトモデルを拡張するOpenJDKプロジェクト。オブジェクト指向の抽象化とプリミティブ型のパフォーマンス特性を組み合わせることを目標とする。構文の簡潔化など軽量な言語機能を扱うProject Amberとは役割が異なる。
背景
従来のJavaでは、オブジェクトは常に参照型(ヒープに確保され、ポインタ経由でアクセスされる)だった。Project Valhallaはここに値型(value type)を導入し、プリミティブ型並みの性能(インライン化・ボクシング回避)を持つオブジェクトを作れるようにする。
JEP 401 (Value Classes and Objects)
Project Valhallaの中核となるJEP。
- プレビュー機能として JDK 28 (2027年3月予定)でOpenJDK本流に統合される見込み(2026年6月時点)
- 変更規模は197,000行以上、1,816ファイルに及ぶ大規模なもの
- プレビュー機能のためデフォルトでは無効(オプトインが必要)
タイムライン
Compact Object Headersとの関係
64bitに再設計されたオブジェクトヘッダには、値型対応を見越して4bitの予約領域が確保されている。
Generic Specialization
値型の導入に合わせて、コレクションをプリミティブ値向けに特化させるgeneric specializationも構想されている。ただし現行の型消去(type erasure)による参照型ジェネリクスへの、完全なreified generics(実行時に型情報を保持する方式)の導入は、既存バイトコードとの互換性維持が難しく可能性は低いとされる。