ソースコードや中間コードを、実行時にコンパイルするタイプのコンパイラのことです。
今実行しようとしている箇所のコードを、その場でコンパイル(JITコンパイル)して、機械語のオブジェクトコードをメモリに残しておきます。すでにコンパイルを終えているコードを実行するときには、保存しておいたオブジェクトコードを使えるため、通常のコンパイル方式と同等の速度で実行できます。ただし、メモリに結果を残す都合上、メモリの消費量は増えます。
当然、コンパイルに掛かる時間が上乗せされるので、実行速度の向上分よりもコンパイル時間の方が上回ってしまっては無意味になります。そのため、1度にコンパイルする範囲は、今実行したい関数のコードだけ、といったような小さめの範囲だけに抑えます。同様の理由から、施すのに時間がかかる高度な最適化は期待できませんが、実行時に行えるということは、実行環境の性能をチェックできるということでもあるため、使えるメモリの量や、CPU が持つ機能などを踏まえた最適化をかけられる可能性があります。
仮想マシンやインタプリタを用いて、ソースコードや中間コードをオブジェクトコードに変換して実行する方法を採るプログラミング言語において、実行速度を向上させるために導入されていることが多いです。このような構成にすることで、特定の OS や CPU などに依存しないコードのまま配布することができ、それでいてコンパイラを用いる言語に近い実行性能を実現します。たとえば、Java は仮想マシンを用いる仕組みですが、当初は実行性能の遅さに欠点がありました。しかし、JITコンパイラの導入や、その改善などによって、現在では実行性能は大きく向上しています。
JITコンパイラとの対比で、実行前にあらかじめすべてのコンパイルを済ませておくタイプのコンパイラを、AOTコンパイラ(事前コンパイラ)と呼ぶことがあります(AOT は Ahead-Of-Time の略)。C言語のコンパイラのように、こちらの方式が一般的である場合には、わざわざ AOTコンパイラとは呼ばずに、単にコンパイラと呼ぶことがほとんどです。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
Twitter でツイート/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |