老师,为什么我试的用volitile的定义的变量也会被编译器优化
来源:9-5 jmm的内存可见性

qq_orientation_0
2019-03-07
package com.interview.javabasic.bytecode;
public class ByteCodeSample {
private static volatile Integer i = 1;
public static void main(String[] args) {
int j=5;
i++;
++j;
System.out.println(i);
System.out.println(j);
}
}
如上所示代码编译之后字节码文件如下:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.interview.javabasic.bytecode;
public class ByteCodeSample {
private static volatile Integer i = 1;
public ByteCodeSample() {
}
public static void main(String[] var0) {
byte var1 = 5;
Integer var2 = i;
i = i + 1;
int var4 = var1 + 1;
System.out.println(i);
System.out.println(var4);
}
}
写回答
1回答
-
翔仔
2019-03-08
同学好,volatile是通过插入内存屏障禁止在内存屏障前后的指令执行重排序,意思是禁止重排序,不排序前提下的优化是okay的,咱们这里的顺序没有发生变化呢。
00
相似问题