java的内存屏障

一、java内存屏障

1.1 what?

内存屏障是一个CPU指令。
① 确保一些特定操作执行的顺序
② 影响一些数据的可见性

编译器和CPU可以保证输出结果一样的情况下对指令重排序,使性能得到优化。

例:插入一个内存屏障,则相当于告诉CPU和编译器,先于这个命令的先执行,后于这个命令的必须后执行。

强制更新一次不同CPU的缓存。

例:一个写屏障会把这个屏障前写入的数据刷新到缓存,这样任何试图读取该数据的线程将得到最新之,而不用考虑道理是哪个cpu核心或者哪个cpu执行的。

1.2 why?

在cpu多核场景下,为了充分利用CPU,会通过流水线将指令并行进行。为了能并行,又需要将指令进行重排序,但是指令不是在所有场景下都能进行重排序,除了本身一些规则,我们还需要保证多CPU的告诉缓存中的数据与内存报纸一致性,不能确保内存与CPU缓存数据一致性的指令也不能重排。

内存屏障正式通过阻止屏障两边的指令重排序来避免编译器和硬件的不正确优化而提出的一种解决办法。

1.3 硬件层的内存屏障

① lfence:Load Barrier读屏障
② sfence :

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值