Jvm 热点JIT、死代码消除和副作用?

Jvm 热点JIT、死代码消除和副作用?,jvm,jvm-hotspot,Jvm,Jvm Hotspot,HotSpot可以执行JIT优化以删除死代码,从而使代码更快、更小 它如何知道它正在删除的代码没有副作用,或者它是否调用本机代码;比如说,通过一个热点内部,比如System.nanoTime()?它是否避免调用方法并依赖于inline来了解表达式是否有副作用,或者它是否仅用于消除if情况?许多热点优化都是在内联之后发生的,因此它们只需要局部知识。DCE适用于分支和未使用的结果 枯枝很容易修剪,因为它们在无法触及时不会产生副作用 未使用的结果可能会使其死气沉沉,直到它们离开本地(内联后!)作用域或

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


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

许多热点优化都是在内联之后发生的,因此它们只需要局部知识。DCE适用于分支和未使用的结果

枯枝很容易修剪,因为它们在无法触及时不会产生副作用

未使用的结果可能会使其死气沉沉,直到它们离开本地(内联后!)作用域或命中具有副作用的内容,这与已使用的结果没有什么不同


在与JNI相同的意义上,intrinsic不是本机代码。这些方法被声明为本机方法,但本质的一点是,与任意本机代码相比,它们更关心如何对其进行优化。

许多热点优化都发生在内联之后,因此它们只需要局部知识。DCE适用于分支和未使用的结果

枯枝很容易修剪,因为它们在无法触及时不会产生副作用

未使用的结果可能会使其死气沉沉,直到它们离开本地(内联后!)作用域或命中具有副作用的内容,这与已使用的结果没有什么不同


在与JNI相同的意义上,intrinsic不是本机代码。这些方法被声明为本机方法,但内在方法的要点在于,与任意本机代码相比,它更关心如何对其进行优化。

它只能删除已知未调用的代码或未使用的结果。如果它不知道一个方法是做什么的,它就不能删除它。e、 g.如果你调用System.nanoTime()但不使用它的结果,它仍然无法消除它。它只能删除它知道未调用的代码或未使用的结果。如果它不知道一个方法是做什么的,它就不能删除它。e、 如果你调用System.nanoTime()但不使用它的结果,它仍然不能消除它。