共计 456 个字符,预计需要花费 2 分钟才能阅读完成。
JMM 内存模型与 CPU 缓存模型相似,CPU 不是间接去主内存获取数据,而是两头有一个 CPU 缓存,CPU 从缓存中获取数据。在线程内存中有共享变量的正本,线程操作的是这个正本,再同步给主内存,这种机制导致线程 1 对共享变量进行扭转,其余线程不会实时感知到。
Volatile
volatile 关键字保障了共享变量实时可见(可见性)和有序性。(原子性只能通过 sync 去保障)
缓存一致性协定
缓存一致性从硬件层面上保障了被 volatile 润饰的变量批改后 马上 会同步给主内存,其余 cpu 通过 总线嗅探机制 感知到数据的变动(数据存储到主内存会通过总线),从而使本人的正本生效。
指令重排序
CPU 在运行过程中,会依据语义本人去优化代码的执行程序。
as-if-serial 和 happens-before 准则
大抵就是不管怎么重排序,单线程程序的执行后果不能被扭转。(语句之间没有依赖)
内存屏障
内存屏障都是通过硬件层面实现。
双重查看锁单例半初始化问题
从字节码水平上来说,对象创立会先赋零值,再初始化。指令重排序可能导致返回还没有进行初始化的对象。
正文完