关于问题既然 CPU 有缓存一致性协议(MESI),为什么 JMM 还需要 volatile 关键字?一共有 3 位热心网友为你解答:
【1】、来自网友【木子卿 39910504】的最佳回答:
大概是 mesi 还是耗性能的。不能啥时都开启吧。而通过 volatile 关键字,就会在该变量的读取,写入的前后插入响应内存屏障。jvm 会吧 jmm 规定的内存屏障转换为硬件平台对应的内存屏障指令。这些指令才是各种类型平台实现 mesi 的关键,使其对其他 CPU 的缓存过期,保障内存可见性。这还牵涉到指令重排的问题。
而不加这个关键字就不会有这些内屏屏障。一般情况下就没有内存可见性。当然如果加锁,还是能够保证内存可见性的。因为锁代码块的前后好像也是要加内存屏障的。具体记得不清楚了。
上面大致原因应该是对的,具体细节记得不清楚了。
【2】、来自网友【勇者自由说】的最佳回答:
这俩有啥关系吗[捂脸]
【3】、来自网友【猴子 22451748】的最佳回答:
MESI 是 CPU 层面上的,volatile 是 JVM 层面上的。它们之间没什么关系。
以上就是关于问题【既然 CPU 有缓存一致性协议(MESI),为什么 JMM 还需要 volatile 关键字?】的全部回答,希望能对大家有所帮助,内容收集于网络仅供参考,如要实行请慎重,任何后果与本站无关!