1.循环体中有System.out.println(“…”); IO操作,里面会涉及到synchronized操作
2.Thread.sleep(0);会触发cpu的切换,切换之后的值会被重新加载
3.启动时加入参数:-Djava.compiler=NONE或者增加volatile,都会禁止深度优化,也叫活性失败
jvm中的jit有个功能深度优化,例如stop=false,while(!stop)会被优化成while(true),括号里面的值变成了常量
volatile能禁止这种深度优化
不加volatile同样可见
于 2022-06-20 10:01:45 首次发布