????Java Memory Model???JMM?? ?????е?Java???????????????????????????μ?????????????????????????????????????????????(??????????????Java???????????????壬?????????????????????????????)??
????????????ж?????????CSP(?????????)??Actor????????????????????????????????????????????????????У?????????????????:
????1???????
????2???????
????3????????
??????????漰??????????????????????????????????????????????м??????????и???????????i++???????????????????????????????++????????++??????JVM?????????CPU?е??????????????????????? ??????JVM?????????????i??????????????????????????????д?????????i???????????????????????????????????????????????У?????????????????????????????????????о?????????????????????Ч?????????ж??????-???-д??????????????????????????????
????????CPU?????????????????????????????????????????????????????????????????CPU????????????????????棬?????????????CPU?????????????в????????????????????????????????????????????????????????????????С???????????????????????????????????????????????????棬???漰?????????????????CPU?в?????????????????????????????????????????????????????????????????????????CPU????Э???????к????
?????????CPU?????????????

????CPU???????????????????????????????????????д??????????檔??????????????е????洢?????????????????????CPU????????????????????ж????? ????????????????????????????

????????????д??????????????????????????????????????????CPU??ü???????????????????????壬???????ж??????????????????????(cache line)??????????????????????block????????д??????????????????????е????????洢??????????store buffer?м?????????????????????Σ???????????????????????棬?????е????????????????flush????檔
public class MemoryModel {
private int count;
private boolean stop;
public void initCountAndStop() {
count = 1;
stop = false;
}
public void doLoop() {
while(!stop) {
count++;
}
}
public void printResult() {
System.out.println(count);
System.out.println(stop);
}
}
??????????δ????????????????? count = 1 ???? stop = false ?????????????????CPU???????????????????????????????????????????????滺???????????? ????stop??????????е???count??????????stop???o???count??write bufferд??????μ?????檔
????????CPU??????????????Java????JIT???????????????????????????????????count = 1??stop = false?????????????????????CPU???????????п??????????????????????????е??????????????????????CPU??????????????as-if-serial(????????????????????????н??????)???????????????ж??????????????????????????????????????????????????????????????????£??????н??б?????????????????????????????????????????????T1?????initCountAndStop?????????T2???printResult????????????0?? false?? ??????1?? false?? ???????0?? true????????T1?????doLoop()?????T2???????initCountAndStop?? ??T1???????????????????????????????????????????stop??????
??????????????Щ?????????μ??????????????е????????????????????е??????????????????????????????????????????????????????????????????????????????Java?????????JavaMemoryModel??Java???????????Java?????JVM??????????????????????????????????????????Java????volatile??synchronized??final????????????????????????????????д????????????????
??????JDK1.5????Java????????????????????????????????????У?????????????????????????????final??ε???????volatile??ε?д????????volatile??ε??д??????
??????????JDK1.5?У????JSR133??????μ??????????????????????