HotSpot可以执行JIT优化以删除死代码,使代码更快更小。
它如何知道它正在删除的代码没有副作用,或者它是否调用本机代码;比方说,通过一个HotSpot内在函数,如System.nanoTime()
?它是否避免调用方法并依赖内联来了解表达式是否具有副作用,还是仅用于消除if
个案例?
答案 0 :(得分:5)
内联后发生了许多热点优化,所以它们只需要本地知识。 DCE适用于分支和未使用的结果。
死枝很容易修剪,因为它们在无法到达时不会产生副作用。
未使用的结果可能会反复出现它们的死亡,直到它们离开本地(在内联之后!)范围或者遇到具有副作用的东西,这与使用的结果没有什么不同。
内在函数不是与JNI相同的本机代码。这些方法被声明为原生的,但内在的一点是compiler has more knowledge关于如何优化它而不是任意本机代码。