您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 1浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java多线程 可见性问题出现的原因

java持续实践 发布时间:2020-09-05 17:19:11 ,浏览量:1

文章目录
      • 可见性问题出现的原因

可见性问题出现的原因

主要的原因可以从下图中分析出来. 此图中, 最下层为ram, 也就是内存, 而内存离CPU之间 ,是有多级的缓存的. L3 cache为内存的一部分, 会把内存中高频用到的部分缓存起来. L2 cache为L3 cache的一部分, 会把L3 cache高频用到的部分缓存起来. L1 cache为L2 cache的一部分, 会把L2 cache高频用到的部分缓存起来. 每一层缓存的大小在缩小, 但读取速度在不断的增加. 到了Register 是寄存器, 速度最快, CPU从寄存器中拿数值.

如果不经过这些缓存, 而是直接从ram中拿数据的话, 会极大的降低CPU的运行效率. 但正是由于不是拿的主存中的数据, 就会出现可见性的问题. 从Windows10的任务管理器中, 也可以看到L1 L2 L3级缓存, 并且其大小是从小到大的. 不同的处理器, 可能缓存层级少一些, 几乎不可能出现可见性问题, 但可能有的处理器缓存的层级多, 并且可能不去同步主内存中最新的值. 而JMM给出的规范就是, 规定在何时一定要去主内存中同步数据, 获取最新的数据,

完整的文字总结:

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0416s