Project Valhalla、JDK 28での実装決定 10年の開発結実
原題: Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28
なぜ重要か
Java の基本的なメモリモデルに関わる大規模な改善が実装段階に進み、CPU とメモリの性能差に対応する最適化がプロダクション利用への道を開く。エンタープライズ Java の性能向上につながる可能性がある。
Oracle のエンジニア Lois Foltan が 6 月 15 日、JEP 401「Value Classes and Objects」が OpenJDK メインリポジトリに統合され JDK 28 をターゲットとすることを確認した。197,000 行以上のコード追加となる大規模な変更だが、プレビュー版で初期段階であると Brian Goetz が述べている。
Project Valhalla は「クラスのように書けて、int のように動作する」というスローガンで始まった 10 年以上前からの Java 改善プロジェクトである。従来 Java では int などの 8 種類のプリミティブ型を除くすべてがリファレンス型であり、ヒープ上のオブジェクトへのポインタを保持する仕組みになっていた。これにより大量のオブジェクト利用時にはメモリアクセスのオーバーヘッドが増加していた。
Valhalla プロジェクトの目標は、通常のクラスのような読みやすいコード記述を保ちながら、プリミティブ型と同等の効率性を実現することである。オブジェクトはヒープ上に散在し、各オブジェクトは約 12 バイトのメタデータ付きヘッダを持つ必要があり、さらにガベージコレクション対象となるため、100 万個の Point オブジェクト配列はメモリ上で散在した状態になっていた。
ハードウェアの進化に対応するため、CPU とメインメモリの速度差が拡大する中で、キャッシュラインの効率的な利用が重要になった。Valhalla では密集したメモリレイアウトを実現することで、パフォーマンスを向上させる狙いがある。
ただし今回の統合は PR として 1,816 ファイルにわたる大規模変更であるため、他のコミッターは期間中大型コミットを控えるよう求められた。重要な点として、この機能はプレビュー版で、デフォルトでは無効化されており、プロジェクトの全機能実装ではなく初期段階に過ぎないと Brian Goetz が指摘している。