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

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)にコンパイルを済ませておくことを表しているよ
← 用語集にもどる