我认为 JIT 编译器最终会在编译代码的性能方面击败 AOT 编译器,因为 JIT 的固有优势(只能使用运行时可用的信息)。一个论点是 AOT 编译器可以花费更多时间编译代码,但服务器 VM 也可能花费大量时间。
我确实理解 JIT 在某些情况下似乎确实击败了 AOT 编译器,但在大多数情况下它们似乎仍然落后。
所以我的问题是,阻止 JIT 编译器击败 AOT 编译器的具体、棘手的问题是什么?
编辑:
一些常见的论点:
- AOT 编译器可以花费更多时间进行高级优化->如果您运行服务器虚拟机数天,您可以花费相同的时间,如果不是更长的话。
- 字节码解释是有成本的->现在大多数 JIT 编译器都会缓存本机机器指令。
另一个编辑:
有关特定示例,请参阅本文:提高 Swing 性能:JIT 与 AOT 编译。从我从这篇文章中可以了解到,作者基本上是在说,当没有热点时,拥有运行时信息的优势会降低,因此没有 JIT 开销的 AOT 会胜出。但是40%??这似乎没有多大意义。仅仅是被比较的 JIT 编译器没有针对这种情况进行调整吗?或者它是更基本的东西?