HotSpot JIT,死代码消除和副作用?

时间:2016-06-21 17:22:06

标签: jvm jvm-hotspot

HotSpot可以执行JIT优化以删除死代码,使代码更快更小。

它如何知道它正在删除的代码没有副作用,或者它是否调用本机代码;比方说,通过一个HotSpot内在函数,如System.nanoTime()?它是否避免调用方法并依赖内联来了解表达式是否具有副作用,还是仅用于消除if个案例?

1 个答案:

答案 0 :(得分:5)

内联后发生了许多热点优化,所以它们只需要本地知识。 DCE适用于分支和未使用的结果。

死枝很容易修剪,因为它们在无法到达时不会产生副作用。

未使用的结果可能会反复出现它们的死亡,直到它们离开本地(在内联之后!)范围或者遇到具有副作用的东西,这与使用的结果没有什么不同。

内在函数不是与JNI相同的本机代码。这些方法被声明为原生的,但内在的一点是compiler has more knowledge关于如何优化它而不是任意本机代码。

相关问题