synchronized实现过程:
1.Java代码:synchronized
2.字节码层级:monitorenter,monitorexit
3.执行过程中自动升级(偏向->自旋->重量级锁)
4.cpu汇编层级:lock comxchg
上图为双核cpu的内部构造,两个核共享一个三级缓存
超线程:一个ALU对应多个PC,一个核里面有两个pc,线程切换时不用存之前线程的数据,
直接两个pc记录运行到哪了,切换节约时间。
从主存读数据的时候,按块读(局部性原理)
这个块叫cache line(缓存行),一行数据64字节
MESI Cache一致性协议:
modified修改,exclusive独占,shared共享,invalid
Intel cpu是mesi缓存一致性协议,其他的cpu不一定
volatile怎么实现指令重排序?
1.volatile
2.字节码层级:ACC_VOLATILE
3.JVM层级:JVM的内存屏障
屏障两边的指令不可以重排!保障有序!
4.hotspotspot实现