【エーオーティーコンパイル】

AOTコンパイル とは?

💡 前日に準備しておけば、朝の支度はあっという間!
📌 このページのポイント
AOTコンパイル vs JITコンパイル AOTコンパイル(事前) ソースコード AOTコンパイラ ネイティブコード → そのまま高速に実行 JITコンパイル(実行時) ソースコード 実行中に コンパイル 最適化コード → 実行しながら最適化
AOTコンパイルとJITコンパイルの比較イメージ
ひよこ ひよこ

AOTコンパイルって何なの?

ペンギン先生 ペンギン先生

プログラムを実行する前に、あらかじめ機械語に変換しておく方式のことだよ。お弁当を朝作るんじゃなくて、前日の夜に作っておくイメージだね。

ひよこ ひよこ

JITコンパイルとは何が違うの?

ペンギン先生 ペンギン先生

JITは実行中にその場でコンパイルするけど、AOTは実行前に全部済ませておくんだ。だからAOTは起動が速い代わりに、実行中の最適化はできないんだよ。

ひよこ ひよこ

どんなところで使われているの?

ペンギン先生 ペンギン先生

AndroidアプリやiOSアプリ、.NETのNative AOT、GraalVMなどで使われているよ。起動速度やメモリ効率が重要な場面で特に活躍するんだ。

ひよこ ひよこ

じゃあ全部AOTにすればいいんじゃないの?

ペンギン先生 ペンギン先生

AOTだと実行時の情報を使った最適化ができないから、長時間動くサーバーアプリではJITの方が速くなることもあるんだよ。場面に応じて使い分けるのが大事だね。

ひよこ ひよこ

最近はAOTが注目されているって聞いたけど、なんでなの?

ペンギン先生 ペンギン先生

クラウドサーバーレス環境では起動速度がコストに直結するからだよ。コールドスタートを短くするためにAOTが重宝されているんだ。GraalVMのネイティブイメージやGo言語も事前コンパイル方式だね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「AOTコンパイル」って出てきたら「実行前にまとめて機械語に変換しておく方式」と思えればだいたいOK!
📖 おまけ:英語の意味
「Ahead-Of-Time Compilation」 = 事前コンパイル
💬 Ahead-Of-Time は「前もって」という意味で、実行より前(ahead of time)にコンパイルを済ませておくことを表しているよ
← 用語集にもどる