【发布时间】:2019-03-01 13:48:03
【问题描述】:
即时 (JIT) 编译器可以根据 Ahead-of-Time (AOT) 编译器无法获得的运行时信息优化程序。
这个运行时信息最明显的例子是目标平台,例如运行程序的确切 CPU,或任何可用的加速器,例如 GPU。这就是 OpenCL 是 JIT 编译的意义。
但假设我们提前知道目标平台是什么:我们知道哪些 SIMD 扩展可用,等等。JIT 编译器可以利用哪些其他运行时信息,而 AOT 编译器不可用?
HotSpot 风格的 JIT 编译器会自动优化程序的热点……但 AOT 编译器不能只优化整个程序、热点和所有内容吗?
我想要一些 JIT 编译器可以执行而 AOT 编译器不能执行的特定优化的示例。如果您能提供任何证据证明此类优化在“现实世界”场景中的有效性,则可获得奖励积分。
【问题讨论】:
-
@AnubhavSrivastava 感谢您的链接。这是一个类似的问题,但评分最高的答案和接受的答案都没有真正回答我的问题。不过,在其他答案中有几个仅 JIT 优化的示例:跨库优化和使用跟踪树进行动态内联。我很想知道这些在实践中有多大的不同。
-
反射是一个臭名昭著的问题,不能静态地从一个字符串中确定需要什么类型。
标签: optimization compiler-construction compiler-optimization jit