-
Notifications
You must be signed in to change notification settings - Fork 727
Description
Du Liao Yi Ci "Cuo Wu "De Bing Fa Kong Zhi Yin Fa De Si Kao Yi Wen ,Jue De You Xie Yi Wen . Dui Yu Xia Mian De Dai Ma :
private boolean flag = true;
public void runMethod() {
while (flag) {
synchronized (new Simple(1)){}
}
}
public void stopMethod() {
System.out.println("change 'flag' field ...");
flag = false;
}
}
Yuan Wen De Guan Dian Si Hu Qing Xiang Yu synchronizedDai Lai De happens-beforeGui Ze Ke Yi Bao Zheng Dui flagDe Ke Jian Xing ,Suo Yi Xu Yao Yong JVMCan Shu -XX:-EliminateLocksGuan Bi Suo Xiao Chu You Hua Jiu Xing Liao .
Wo De Yi Wen Zai Yu :
- Nei Cun Ping Zhang Xu Yao Cheng Dui Shi Yong ,Dui flagDe Xie Ru Bing Mei You Tong Bu Cuo Shi ,Yi Bao Zheng Duo Ge Bian Liang De Nei Cun Cao Zuo Shun Xu
- Shang Mian Dai Ma Shi Ji Shang Dui Dan Ge Bian Liang De Du Xie Cao Zuo ,Wo Ren Wei Zhe Chong Qing Kuang Zai Ying Jian (You Qi Shi x86)Ceng Mian Lai Shuo Bu Xu Yao Ren He Nei Cun Ping Zhang ,Huan Cun Yi Zhi Xing Xie Yi Ji Ke Bao Zheng Bian Liang Dui Qi Ta CPUHe Xin De Quan Ju Ke Jian ,Zhe Yi Dian Can Kao Nei Cun Ping Zhang (Dui Ying Jian ) #10 He Does a memory barrier ensure that the cache coherence has been completed?,Gao Zan Hui Da De He Xin Luo Ji Jiu Shi : Dui Yu Dan Ge Bian Liang ,Huan Cun Yi Zhi Xing Xie Yi Ji Ke Bao Zheng Dui CPUQuan Ju Ke Jian ,Nei Cun Ping Zhang Zhi Shi Cu Shi (Jia Su )Liao Zhe Yi Dian ,Suo Yi Zai Zhe Chong Qing Kuang Xia Jia Bu Jia Nei Cun Ping Zhang Zhi Shi Yi Ge Kuai He Man De Wen Ti ,Bu Shi Ke Jian Yu Bu Ke Jian De Wen Ti .
- Wo Jue De Shang Mian De Dai Ma Qi Shi Huan Shi JITRu He You Hua De Wen Ti ,Guan Bi Suo Xiao Chu You Hua ->whileXun Huan Nei Han You Suo ->Suo Zu Zhi Liao JITSheng Cheng Si Xun Huan Dai Ma (Cai Ce )
Suo Yi Wo Ba Dai Ma Gai Xie Cheng Liao Mei You Suo He volatile:
class MultiProcessorTask {
private boolean flag = true;
long sum = 0L;
public void runMethod() {
while (flag) {
long a = System.currentTimeMillis() % 9;
if (a == 1L) {
sum += a;
}
}
System.out.println("Result: " + sum);
}
public void stopMethod() throws InterruptedException {
System.out.println("Zhun Bei Shui Mian 1Miao ,Ran Hou Zhi flagWei false.");
Thread.sleep(1000);
System.out.println("change 'flag' field ...");
flag = false;
}
}
class ThreadA extends Thread {
private MultiProcessorTask task;
ThreadA(MultiProcessorTask task) {this.task = task;}
@Override
public void run() {
task.runMethod();
}
}
public class TestRun {
public static void main(String[] args) throws InterruptedException {
MultiProcessorTask task = new MultiProcessorTask();
ThreadA a = new ThreadA(task);
a.start();
task.stopMethod();
System.out.println("it's over");
}
}
Zhi Jie Yun Xing ,Bu Hui Tui Chu ,Jia Shang JVMCan Shu -XintJie Shi Zhi Xing ,Hui Tui Chu ,Zhe Yi Bu Jiu Shuo Ming Liao Zhe Ge Guo Huan Shi JITDe ,Xia Mian Tong Guo jitwatchKan Yi Xia JITYou Hua Hou De Hui Bian Dai Ma . Shi Yong De JVMCan Shu Shi :
Mei You volatileShi :
0x00000001117cc1f6: callq *%r10 ;*invokestatic currentTimeMillis
; - test.MultiProcessorTask::runMethod@7 (line 10)
0x00000001117cc1f9: mov %rax,%r10
0x00000001117cc1fc: mov %rax,%r11
0x00000001117cc1ff: sar $0x3f,%r11
0x00000001117cc203: movabs $0x1c71c71c71c71c72,%rax
0x00000001117cc20d: mov %r10,%r8
0x00000001117cc210: imul %r10
0x00000001117cc213: sub %r11,%rdx ;*lrem
; - test.MultiProcessorTask::runMethod@13 (line 10)
0x00000001117cc216: mov %rdx,%r10
0x00000001117cc219: shl $0x3,%r10
0x00000001117cc21d: add %rdx,%r10
0x00000001117cc220: mov %r8,%r11
0x00000001117cc223: sub %r10,%r11
0x00000001117cc226: cmp $0x1,%r11
0x00000001117cc22a: jne L0002 ;*ifne ;Ru Guo Yu Shu Bu Shi 1
; - test.MultiProcessorTask::runMethod@18 (line 11)
0x00000001117cc22c: incq 0x10(%rbp) ; OopMap{rbp=Oop off=144}
;*goto
; - test.MultiProcessorTask::runMethod@31 (line 14)
L0002: test %eax,-0xa279236(%rip) # 0x0000000107553000
;*goto
; - test.MultiProcessorTask::runMethod@31 (line 14)
; {poll} *** SAFEPOINT POLL ***
0x00000001117cc236: jmp L0001
L0003: xor %ebp,%ebp
0x00000001117cc23a: jmp L0000
Ke Yi Kan Chu ,Li Mian Xing Cheng Liao Yi Ge Si Xun Huan ,Bu Zai Pan Duan flagDe Zhi ,Shen Zhi Ye Bu Ba Wei 1De Yu Shu Jia Dao sumZhong ,Mei Ci Xun Huan Zhi Shi Qu Dang Qian Shi Jian ,Ran Hou Qu Yu .
Er Gei flagJia Shang volatileHou De Hui Bian Dai Ma Wei :
L0000: mov 0x10(%rbx),%r10 ;*getfield sum; Yu Shu Shi 1Shi Tiao Dao Zhe Li ,Qu sumJia Zong
; - test.MultiProcessorTask::runMethod@23 (line 12)
0x0000000119be7867: add $0x1,%r10
0x0000000119be786b: mov %r10,0x10(%rbx) ;*putfield sum
; - test.MultiProcessorTask::runMethod@28 (line 12)
0x0000000119be786f: nop ; OopMap{rbx=Oop off=80}
;*goto
; - test.MultiProcessorTask::runMethod@31 (line 14)
L0001: test %eax,-0xc6fd876(%rip) # 0x000000010d4ea000; Yu Shu Bu Shi 1Tiao Dao Zhe Li ,Qu flagCe Shi Ji Xu Xun Huan
;*aload_0
; - test.MultiProcessorTask::runMethod@0 (line 9)
; {poll} *** SAFEPOINT POLL ***
L0002: movzbl 0xc(%rbx),%r11d ;*getfield flag
; - test.MultiProcessorTask::runMethod@1 (line 9)
0x0000000119be787b: test %r11d,%r11d; Ce Shi flagShi Bu Shi Wei false
0x0000000119be787e: je L0003 ;*ifeq; Shi false,Tiao Dao L0003Tui Chu Xun Huan
; - test.MultiProcessorTask::runMethod@4 (line 9)
0x0000000119be7880: movabs $0x10e289ce4,%r10
0x0000000119be788a: callq *%r10 ;*invokestatic currentTimeMillis
; - test.MultiProcessorTask::runMethod@7 (line 10)
0x0000000119be788d: mov %rax,%r11
0x0000000119be7890: movabs $0x1c71c71c71c71c72,%rax
0x0000000119be789a: imul %r11
0x0000000119be789d: mov %r11,%r10
0x0000000119be78a0: sar $0x3f,%r10
0x0000000119be78a4: sub %r10,%rdx ;*lrem
; - test.MultiProcessorTask::runMethod@13 (line 10)
0x0000000119be78a7: mov %rdx,%r10
0x0000000119be78aa: shl $0x3,%r10
0x0000000119be78ae: add %rdx,%r10
0x0000000119be78b1: sub %r10,%r11
0x0000000119be78b4: cmp $0x1,%r11
0x0000000119be78b8: je L0000 ;*ifne; Ru Guo Yu Shu Shi 1,Na Yao Tiao Dao L0000
; - test.MultiProcessorTask::runMethod@18 (line 11)
0x0000000119be78ba: jmp L0001; Yu Shu Bu Shi 1,Tiao Dao L0001
L0003: mov $0xffffff65,%esi
Dai Ma Bu Tong Yi Mu Liao Ran Liao . Suo Yi ,Zai Zhen Dui Dan Ge Bian Liang De Qian Ti Xia ,Bu Guan Shi volatileHuan Shi Jia Suo Ge Chong Hua Shi Cao Zuo ,Suo Zhen Dui De Du Bu Shi Ying Jian Ceng Mian Shang De Ke Jian Xing Wen Ti ,Er Shi Ru He Zu Zhi JITJi Jin You Hua De Wen Ti .
Liang Ci Hui Bian Dai Ma De You Hua Ji Bie Du Shi :
Qi Shi ,Wo De Li Zi Zai Bu Jia volatileDe Qing Kuang Xia Shi Yong JVMCan Shu -XX:-UseOnStackReplacementYe Neng Zheng Chang Tui Chu .