我以前见过fld = fld
几次类似的情况,但在所有这些情况下,可以通过更好的性能消除虚拟写入。
public class Tst{
public volatile int fld = 1;
public void m(){
//... Something
fld = fld;
//... Something else
}
}
问题是这种虚拟写入是否有其用例,或者这是一些解决方法?对我来说,这似乎与(因为根据 JMM,没有存储和加载可以在虚拟写入中重新排序)
public class Tst{
public volatile int fld = 1;
private static final Unsafe U;
public void m(){
//... Something
U.fullFence();
//... Something else
}
}