public class ez {
public static volatile int mdc = 1;
public static void main(String[] args){
for(int i = 1; i < 10000000; i ++){
}
mdc+=1;
}
}
我将上面的代码反汇编之后
0x0000000002caa28c: movabs $0xd6099b28,%r10 ;
{oop(a 'java/lang/Class' = 'jk/ez')}
0x0000000002caa296: mov 0x68(%r10),%r8d
0x0000000002caa29a: inc %r8d
0x0000000002caa29d: mov %r8d,0x68(%r10)
0x0000000002caa2a1: lock addl $0x0,(%rsp) ;*putstatic mdc
; - jk.ez::main@19 (line 14)
mov %r8d,0x68(%r10) 是把变量mdc压入内存的操作没错吧,但是为什么lock指令在这之后呢?不应该把变量mdc压入之前就先锁总线或者锁缓存行么?恳请赐教