• 生活小妙招免费各类生活中的小问题知识以及音乐简谱等,是你了解世界未知知识的好地方。

既然CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字?

十万个为什么 空空 2024-3-15 14:48:32 8次浏览

关于问题既然 CPU 有缓存一致性协议(MESI),为什么 JMM 还需要 volatile 关键字?一共有 3 位热心网友为你解答:

【1】、来自网友【木子卿 39910504】的最佳回答:

大概是 mesi 还是耗性能的。不能啥时都开启吧。而通过 volatile 关键字,就会在该变量的读取,写入的前后插入响应内存屏障。jvm 会吧 jmm 规定的内存屏障转换为硬件平台对应的内存屏障指令。这些指令才是各种类型平台实现 mesi 的关键,使其对其他 CPU 的缓存过期,保障内存可见性。这还牵涉到指令重排的问题。

而不加这个关键字就不会有这些内屏屏障。一般情况下就没有内存可见性。当然如果加锁,还是能够保证内存可见性的。因为锁代码块的前后好像也是要加内存屏障的。具体记得不清楚了。

上面大致原因应该是对的,具体细节记得不清楚了。

【2】、来自网友【勇者自由说】的最佳回答:

这俩有啥关系吗[捂脸]

【3】、来自网友【猴子 22451748】的最佳回答:

MESI 是 CPU 层面上的,volatile 是 JVM 层面上的。它们之间没什么关系。

以上就是关于问题【既然 CPU 有缓存一致性协议(MESI),为什么 JMM 还需要 volatile 关键字?】的全部回答,希望能对大家有所帮助,内容收集于网络仅供参考,如要实行请慎重,任何后果与本站无关!

喜欢 (0)