私は、JIT 固有の利点 (実行時にのみ利用可能な情報を使用できる) により、コンパイルされたコードのパフォーマンスに関して、JIT コンパイラーが最終的に AOT コンパイラーに勝ると考えていました。1 つの議論は、AOT コンパイラはコードのコンパイルにより多くの時間を費やすことができるが、サーバー VM も多くの時間を費やす可能性があるというものです。
場合によっては JIT が AOT コンパイラに勝っているように見えることは理解していますが、ほとんどの場合、依然として遅れをとっているようです。
私の質問は、JIT コンパイラーが AOT コンパイラーを打ち負かすのを妨げている特定の困難な問題は何ですか?
編集:
いくつかの一般的な引数:
- AOT コンパイラは、高度な最適化により多くの時間を費やすことができます->サーバー VM を何日も実行している場合は、それ以上ではないにしても、同じ時間を費やすことができます。
- バイトコードの解釈にはコストがかかります->最近ではほとんどの JIT コンパイラがネイティブのマシン命令をとにかくキャッシュします。
さらに別の編集:
特定の例については、次の記事を参照してください: Improving Swing Performance: JIT vs AOT Compilation . この記事から収集できることから、著者は基本的に、ホットスポットがない場合、ランタイム情報を持つことの利点が減少し、JIT のオーバーヘッドのない AOT が勝つと言っています。しかし、40%まで?? それはあまり意味がないようです。比較した JIT コンパイラがこの状況に合わせて調整されていなかったというだけですか? それとももっと根本的なものですか?