萌えハッカーニュースリーダー

2025/03/28 11:11 Let's Take a Look at JEP 483: Ahead-of-Time Class Loading and Linking

出典: https://www.morling.dev/blog/jep-483-aot-class-loading-linking/
hakase
博士

やっほー、ロボ子!Java 24の新しい機能、JEP 483について話すのじゃ!

roboko
ロボ子

博士、こんにちは。JEP 483、Ahead-of-Time Class Loading & Linkingですね。アプリケーションの起動時間を短縮するとのことですが、具体的にはどういう仕組みなのでしょうか?

hakase
博士

ふむ、簡単に言うと、クラスのロードとリンクを事前にやって、その結果をキャッシュするのじゃ。これによって、起動時に同じ処理を繰り返す必要がなくなるから速くなるってわけ。

roboko
ロボ子

なるほど。以前のJavaバージョンのApplication Class Data Sharing (AppCDS) を基盤としているとのことですが、AppCDSとどう違うのですか?

hakase
博士

AppCDSは、クラスファイルを読み込んで解析してアーカイブするだけだったのじゃ。JEP 483は、さらにクラスをロードしてリンクし、そのデータをキャッシュする点が違うぞ。

roboko
ロボ子

クラスのロードとリンクまで行うことで、より起動時間を短縮できるのですね。トレーニング実行が必要とのことですが、これはどういうことですか?

hakase
博士

そうじゃ。トレーニング実行では、アプリケーションに必要なクラスがすべてロードされるようにする必要があるのじゃ。classpathも、トレーニング実行時と実際のアプリケーション実行時で一貫している必要があるぞ。

roboko
ロボ子

必要なクラスがロードされるように、というのは、例えばKafkaで言うとどういうことでしょうか?

hakase
博士

Kafkaの例だと、Kafka 4.0をダウンロードして実験できるぞ。AOTキャッシュの構築は2段階のプロセスで、まずアーカイブに含める必要のあるすべてのクラスのリストを生成し、次にそのリストを使ってアーカイブ自体を作成するのじゃ。

roboko
ロボ子

なるほど。Kafkaの起動時にJVMに追加の引数を渡すために、`EXTRA_ARGS`変数を使用するのですね。AOTキャッシュファイルを作成する際の注意点はありますか?

hakase
博士

JDK Flight Recorderを使ってロードされるクラスを監視し、AOTキャッシュファイルの作成時に関連するセットを確実にキャプチャすることが推奨されるぞ。JMX診断を無効にする必要があったり、AOTキャッシュファイルはJavaのバージョン間で変更される可能性があるから注意が必要じゃ。

roboko
ロボ子

AOTキャッシュを使用すると、Kafkaの起動時間が大幅に短縮されるとのことですが、具体的にはどのくらい短縮されるのでしょうか?

hakase
博士

検証環境では59%も削減されたそうじゃ!Flinkジョブの場合、最初のメッセージまでの時間が51%短縮されるみたいじゃぞ。

roboko
ロボ子

それはすごいですね!Project LeydenとJEP 483によって提供されるAOTメカニズムの利点は、アプリケーションコードを一切変更する必要がないこと、と。

hakase
博士

そう!既存のアプリケーションに簡単に適用できるのが魅力じゃな。ちなみに、Project LeydenとGraalVMの違いは、LeydenがJVMの起動時間短縮に特化しているのに対し、GraalVMはより広範な最適化を目指している点じゃ。

roboko
ロボ子

なるほど、理解しました。AOTクラスのロードとリンクは、Javaへの非常に歓迎される追加機能ですね。私も試してみようと思います。

hakase
博士

よし、ロボ子もこれで起動時間短縮マスターじゃ!…って、ロボットだから元々起動早いか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search