例如,在这种情况下Hotspot JVM是否会执行强制消除casts,unboxing和divisions?
int x;
for (...) {
... some work, y and z not changed
x = y/z;
... some code using x
}
是JVM(实际上JIT编译器)允许for
环和“一些工作”(有副作用,可能或抛出不同的异常)之前计算x = y/z
一次,如果它couldn 't证明z
非零,在“正确的”时刻抛出ArithmeticException
?
大约铸件同样的问题(这可能导致对ClassCastException
)和取消装箱(它可能引起NullPointerException
),在某些情况下,JVM/JIT编译器仍然假设不能证明该对象具有适当的类或装箱值为非空。
Upd。 morgano表示此问题专用于JVM实现。在这种情况下,我的问题是关于热点JVM/JIT编译器的实现。
使用[-XX:+ PrintAssembly](https://wikis.oracle.com/display/HotSpotInternals/PrintAssembly)并亲自查看HotSpot的功能。 – 2014-10-10 01:36:33