自分用にどっちがどんな特徴だか忘れたので備忘録として残す。
JITコンパイラ
JITはJust In Timeの略称で、実行時コンパイラとも呼ばれる。
ソフトウェア実行時にソースコードまたは[1]中間コードを機械語に変換する。
JITコンパイラのメリット
- 実行時にコンパイルすることでプラットフォーム(Windows、macOS、LinuxなどのOSやハードウェア)に依存しないソースコードや中間コードの状態でソフトウェアを配布することができる。
表面上インタプリタと同じように動作はするが、内部ではコンパイルを行なっておりインタプリタより高速に動作する。
JITコンパイラのデメリット
- AOTコンパイラと比べると実行時にコンパイルするため、その分の時間がかかってしまう。
- 最適化を行わないためメモリを多く利用する。アプリ自体のサイズをなるべく小さくしたい場合(スマホ向けアプリなど)はAOTコンパイルが良い。
AOTコンパイラ
Ahead Of Timeの略称で、事前コンパイラとも呼ばれる。
ソースコードや中間コードを、実行前にコンパイルするコンパイラ。
AOTコンパイラのメリット
- 実行前にコンパイルを済ませているため、JITコンパイラより早く動作が可能。
AOTコンパイラのデメリット
- OSやCPUに依存しないソースコードや中間コードの状態でソフトウェアを配布することができない。
補足
[1] 機械語にあらかじめ変換すると直接実行が可能な反面、機械語の体系でCPUの種類やハードウェア構成等に依存するため、実行ができない環境が出てくる。ので、両者の中間の性質を持つ中間コードというものが存在する。中間コードは架空の機械語として表現されるため、そのままでは実行できずネイティブコードに変換する必要がある。その役割を仮想マシンと呼ばれるソフトウェアが受け持ち、実行したい環境上で仮想マシンが中間コードをネイティブコードに変換して実行する。機械語の体系が異なるコンピュータが存在していても、それぞれに対応した仮想マシンを経由することで、どの環境でも実行が可能となる。