Assembling Project Leyden (Dan Heidinga)
OracleのDan Heidingaが登壇し、Javaアプリケーションの起動時間とウォームアップ時間の改善を目的とした「Project Leyden」の進捗を報告した。JDK 24ではAOT(Ahead-of-Time)クラスロードにより2〜3倍のパフォーマンス向上が確認され、JDK 25ではメソッドプロファイリングが追加される。
技術的なポイント
- AOTクラスロード(JDK 24)
クラス間の関係性を記録し、次回以降の実行を高速化。Spring BootのPet Clinicなどの大規模アプリでも効果あり。 - メソッドプロファイリング(JDK 25)
次の基盤技術として導入予定。より精度の高い最適化が可能に。 - アセンブリフェーズ
クリーンなAOTキャッシュを生成し、トレーニング実行とデプロイ実行間で一貫性を確保。オブジェクト状態の管理や初期化が課題。 - 非決定性アーティファクトの対処
再現性のあるビルドを目指し、キャッシュの有効性を分析するツールを開発中。
今後の計画
- JDK 24または25のビルドを試し、トレーニング実行のワークフローに関するフィードバックを提供する
- AOTキャッシュのサイズとパフォーマンス向上のバランスについて意見を出す
- AOTキャッシュの再現性向上の方法を検討する
- ウォームアップ実行環境とデプロイ環境の一致がパフォーマンスに与える影響を調査する
Q&Aのハイライト
- Red HatやMicrosoftによるAOTキャッシュサイズと性能のバランスに関する研究が紹介された。
- 非決定性アーティファクトの再現性問題に対して、アセンブリフェーズが有効な解決策になる可能性が示唆された。
- コマンドラインツールなどのユースケースでは、ウォームアップ実行環境とデプロイ環境の一致が重要であるとの指摘があった。
Java’s Static Dynamism (John Rose)
資料はこちら。
https://cr.openjdk.org/~jrose/pres/202508-DynamicStatic.pdf
John Roseは、Javaにおける「静的(static)」と「動的(dynamic)」の概念について解説し、効率的な動的実行のためには静的解析が重要であることを強調した。彼は、静的解析が将来の動的パフォーマンスを向上させるための意思決定を行うモデルを作成するプロセスであることを説明している。JVMが静的および動的決定プロセスにおいて果たす役割を強調し、JIT(ジャストインタイム)コンパイルとAOT(事前コンパイル)コンパイルの活用についても触れた。また、静的解析の課題として停止問題やRice定理を挙げ、コード最適化における静的フィールドとブートストラップメソッドの重要性を指摘した。議論には、静的解析の将来的な改善の可能性と、静的プログラミングと動的プログラミングのバランスに関する考察も含まれている。
主なポイント
静的・動的解析の違い
- 静的解析:プログラムを実行せずに紙やモデル上で挙動を予測する。
- 動的解析:実際にプログラムを実行して挙動を観察する。
JVMのアプローチ
- JVMは静的な情報(クラスファイル、定数プール、型記述子など)を活用して、動的な最適化を行う。
- invokedynamic命令やbootstrapメソッドにより、動的なメソッド呼び出しにも静的な決定を導入。
課題と提案
- 停止問題や指数的アルゴリズムなど、静的解析には限界がある。
- 静的解析と動的テストのバランスが重要。
- 「stable variables」や「Static Single Assignmentモデル」の導入可能性についても言及。
今後の計画
- JVMにおけるstable variablesや条件の概念を探る。
- ユーザー定義クラスと初期化ロジックをAOTキャッシュに含める可能性を調査。
- static finalを実行時ではなくstaticファイルで公開することの影響を検討。
- John Backusが提案した「静的単一代入モデル (Static Single Assignment)」のメモリへの応用を探る。