1

CPU内存屏障
sfence:StoreFence,当前写操作,与之前的写操作不允许重排序
lfence:LoadFence,当前读操作,与之前的读操作不允许重排序
mfence:MixedFence,当前操作,与之前的操作不允许重排序

JSR内存屏障
image.png

lock指令
原子指令,lock指令是一个full barrier,执行时会锁住内存子系统来确保执行顺序,可以跨多个cpu。优先使用缓存一致性协议,其他使用锁总线,缓存一致性协议失效情况:1cpu不支持,2变量超过缓存行大小64bytes

volatile内存语义
java:volatile
字节码:ACC_VOLATILE
jvm层:storestore volatilewrite storeload、volatileread loadload loadstore
os:lock指令,优先缓存一致性协议,其他锁总线

synchronized内存语义
java:synchronized
字节码:monitorenter monitorexit acc_synchronized
jvm层面:mutex保证只有一个线程能进入,monitorenter load acquire #code releasebarrier monitorexit storebarrier
os:lock总线,cmpxchg

as if serial
不管如何重排序,单线程执行结果不变。

happens-before原则
程序次序规则:一个线程内,一段代码直接结果是有序的
管程锁定所则:lock先与unlock
volatile变量规则:volatile读写不能重排序
线程启动规则:线程start先于这个线程的每一个操作
线程终止规则:线程的所有操作都先于线程的终止检测,线程结束的时候,所有变量都会刷新到主存
线程中断规则:
传递规则:
对象终止规则:对象初始化先与对象的finalize方法

image.png


一只鱼
49 声望1 粉丝

« 上一篇
类加载、结构
下一篇 »
Java对象

引用和评论

0 条评论