最近,我在这里阅读了关于 JVM 优化的文章,这很棒,
但是我对一种优化有疑问,即Null Check Elimination(或 Uncommon trap)
总而言之,Null Check Elimination删除了 aif (obj == null) ...
并希望最好,而如果遇到Segmentation Fault它会重新编译代码,这次包括被忽略的if (obj == null) ...
.
我的问题是,鉴于:
bool foo(MyClass obj)
{
if(obj == null)
return false;
m_someVar++;
obj.doSomething(m_someVar);
}
因为 Null-Check 已被消除,并且仅在m_someVar++
.
当 c 为空时, foo 会执行m_someVar++
额外的时间吗?
编辑:
是否有一些资源可以更深入地解释这种优化的实现,它解释了这种优化如何使代码在语义上保持不变?
谢谢