【发布时间】:2017-08-21 18:07:16
【问题描述】:
我试图解释 Hotspot 的 JIT 是如何推理的。我最感兴趣的是最新的编译阶段(C2 编译器)。 Java 中的 JIT 是否依赖断言进行优化?如果是这样的话,我可以想象在启用断言的情况下代码可以更快运行的示例。
例如,在这样的一段代码中:
static int getSumOfFirstThree(int[] array) {
assert(array.length >= 3);
return array[0] + array[1] + array[2];
}
- 在启用断言时,JIT 是否足够聪明,可以消除对数组访问的边界检查?
- 或者,您是否可以想到其他情况(无论是否实际),断言实际上会改进 JIT 将编译的本机代码?
【问题讨论】: