我认为JIT编译器最终会在编译代码的性能方面击败AOT编译器,因为JIT具有固有优势(可以使用仅在运行时可用的信息)。 一个论点是AOT编译器可以花费更多时间编译代码,但服务器VM也可能花费很多时间。
我确实理解JIT似乎在某些情况下确实打败了AOT编译器,但在大多数情况下它们仍然落后于AOT编译器。
那么我的问题是,是什么具体而棘手的问题阻止了JIT编译器击败AOT编译器呢?
编辑:
一些常见的论点:
- AOT编译器可以花更多时间进行高级优化 -> 如果您正在运行服务器VM几天,您可以花费同样长的时间甚至更长时间。
- 字节码解释的成本 -> 大多数JIT编译器这些天都缓存本机机器指令。
再次编辑:
有关具体示例,请参见此文章:Improving Swing Performance: JIT vs AOT Compilation。从这篇文章中我可以了解到,作者基本上是在说当没有热点时,拥有运行时信息的优势会降低,因此没有JIT开销的AOT获胜。 但是40%吗? 这似乎没有太多意义。 是所比较的JIT编译器没有针对这种情况进行调整,还是有更根本的原因呢?