HotSpot JIT、无用代码消除和副作用?
HotSpot JIT, dead code elimination and side effects?
HotSpot 可以执行 JIT 优化以删除死代码,从而使代码更快更小。
它如何知道它正在删除的代码没有副作用,或者它是否调用了本机代码;比如说,通过 HotSpot 内在的 System.nanoTime()
?它是避免调用方法并依靠内联来了解表达式是否有副作用,还是仅适用于消除 if
个案例?
许多热点优化在内联之后发生,因此它们只需要局部知识。 DCE 适用于分支和未使用的结果。
死枝很容易修剪,因为它们在无法到达时不会产生副作用。
未使用的结果可以反向传播它们的死寂,直到它们离开本地(内联后!)作用域或遇到有副作用的东西,这与使用过的结果没有什么不同。
内部函数不是与 JNI 相同意义上的本机代码。这些方法被声明为本机的,但是内在函数的要点是 compiler has more knowledge 关于如何优化它而不是任意本机代码。
HotSpot 可以执行 JIT 优化以删除死代码,从而使代码更快更小。
它如何知道它正在删除的代码没有副作用,或者它是否调用了本机代码;比如说,通过 HotSpot 内在的 System.nanoTime()
?它是避免调用方法并依靠内联来了解表达式是否有副作用,还是仅适用于消除 if
个案例?
许多热点优化在内联之后发生,因此它们只需要局部知识。 DCE 适用于分支和未使用的结果。
死枝很容易修剪,因为它们在无法到达时不会产生副作用。
未使用的结果可以反向传播它们的死寂,直到它们离开本地(内联后!)作用域或遇到有副作用的东西,这与使用过的结果没有什么不同。
内部函数不是与 JNI 相同意义上的本机代码。这些方法被声明为本机的,但是内在函数的要点是 compiler has more knowledge 关于如何优化它而不是任意本机代码。