揭示volatile关键字背后的奥秘——CPU多级缓存与指令重排

本文探讨了Java中的volatile关键字,详细解释了它如何保证内存可见性和防止指令重排。介绍了CPU多级缓存系统及其可能导致的数据不一致问题,以及CPU为何会进行指令重排以提高效率。同时,文章还讨论了防止指令重排的软件和硬件策略,包括编译器的规则、总线锁和缓存锁机制,并列举了不允许指令重排的特定场景。
摘要由CSDN通过智能技术生成

Volatile的两大作用



Volatile是如何保证内存可见性的?

CPU多级缓存

CPU的运行速度非常快,而对磁盘的读写IO速度却很慢,为了解决这个问题,有了内存的诞生;

而CPU的速度与内存的读写速度之比仍然有着100 : 1的差距,为了解决这个问题,CPU又在内存与CPU之间建立了多级别缓存:寄存器、L1、L2、L3三级缓存。

CPU三级缓存
CPU缓存一个最小单位是64Byte:经过工业实践得出,缓存64Byte是一个较为合适的单位大小,不会因为缓存过大,而使得读取速度降低,也不会因为缓存过少,而多次去读取数据。

核心1核心2在操作同一缓存行中的不同元素时,即使是操作的不同元素不会相互造成影响,但是,同一缓存行数据若被修改,则会通过缓存一致性协议来使其他CPU与核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值