请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,为什么我试的用volitile的定义的变量也会被编译器优化

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);
}

}

正在回答 回答被采纳积分+3

1回答

翔仔 2019-03-08 00:40:17

同学好,volatile是通过插入内存屏障禁止在内存屏障前后的指令执行重排序,意思是禁止重排序,不排序前提下的优化是okay的,咱们这里的顺序没有发生变化呢。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信