- JDK 24 の JEP 483: Ahead-of-Time Class Loading & Linking
- JDK 25 の Ahead-of-Time Command-Line Ergonomics
JDK 24 の JEP 483: Ahead-of-Time Class Loading & Linking
JDK 24 の JEP 483: Ahead-of-Time Class Loading & Linking により、JVMが通常ジャスト・イン・タイムで行うはずの読み取り、解析、ロード、リンク作業を先行して行うことで、アプリケーションの起動時間を短縮することができるようになりました。
https://blog1.mammb.com/entry/2025/04/16/185846
JDK 24では、AOTキャッシュを利用するには、以下の2つのステップが必要です。
- record モードを指定し、アプリケーションのトレーニング実行のダイナミクスを観察し、AOT設定に記録
- create モードを指定し、トレーニング実行中に記録されたコンフィギュレーションに基づいてAOTキャッシュを作成
この2段階のワークフローは以下のように実行されます。
$ java -XX:AOTMode=record -XX:AOTConfiguration=app.aotconf \ -cp app.jar com.example.App ... $ java -XX:AOTMode=create -XX:AOTConfiguration=app.aotconf \ -XX:AOTCache=app.aot
その後、AOTキャッシュを指定してアプリケーションを実行します。
$ java -XX:AOTCache=app.aot -cp app.jar com.example.App ...
JEP 514: Ahead-of-Time Command-Line Ergonomics では、これらの AOTキャッシュ操作を簡略化します。
JDK 25 の Ahead-of-Time Command-Line Ergonomics
AOTキャッシュ出力ファイルを指定する新しいコマンドライン・オプション AOTCacheOutput
が追加されました。
このオプションを指定することで、トレーニングの実行(AOTMode=record)とAOTキャッシュの作成(AOTMode=create)を1ステップで実行できます(AOTConfigurationファイルはコマンド終了時に削除されます)。
$ java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App ...
AOTキャッシュを使用した実行は変更ありません。
$ java -XX:AOTCache=app.aot -cp app.jar com.example.App ...
環境変数 JDK_AOT_VM_OPTIONS
が合わせて追加されました。
この環境変数は JAVA_TOOL_OPTIONS
環境変数と同じように使え、キャッシュ作成(AOTMode=create)にのみ適用されます。JDK_AOT_VM_OPTIONS
を利用することでコマンドラインオプションの違いにより2つのステップが必要と思われる使用例でも、1ステップのワークフローとして実行することができます。
なお、従来通り、トレーニングの実行(AOTMode=record)とAOTキャッシュの作成(AOTMode=create)を別ステップで行うこともできます。これは、例えば、クラウドの小さなインスタンスにアプリケーションをデプロイする場合、小さなインスタンスでトレーニングの実行を行い、大きなインスタンスでAOTキャッシュを作成するなどの用途で有用でしょう(トレーニングの実行はデプロイ環境を反映するが、AOTキャッシュの作成は大規模インスタンスの追加CPUコアとメモリを活用することができる)。