草庐IT

java - 为什么 HotSpot 会使用提升来优化以下内容?

在《EffectiveJava》中,作者提到while(!done)i++;可以通过HotSpot优化成if(!done){while(true)i++;}我对此感到非常困惑。变量done通常不是const,为什么编译器可以这样优化? 最佳答案 作者假设变量done是一个局部变量,它在Java内存模型中没有任何要求将其值暴露给没有同步原语的其他线程。或者换一种说法:done的值不会被任何代码更改或查看,除了这里显示的代码。在这种情况下,由于循环不会改变done的值,它的值可以被有效地忽略,编译器可以在循环外提升对该变量的评估,防止它

java - 为什么 HotSpot 会使用提升来优化以下内容?

在《EffectiveJava》中,作者提到while(!done)i++;可以通过HotSpot优化成if(!done){while(true)i++;}我对此感到非常困惑。变量done通常不是const,为什么编译器可以这样优化? 最佳答案 作者假设变量done是一个局部变量,它在Java内存模型中没有任何要求将其值暴露给没有同步原语的其他线程。或者换一种说法:done的值不会被任何代码更改或查看,除了这里显示的代码。在这种情况下,由于循环不会改变done的值,它的值可以被有效地忽略,编译器可以在循环外提升对该变量的评估,防止它