从jdk8的@Contended说CPU缓存行:
CPU从内存中读取数据实际上是按块读取的,而这个块的大小设定将很大程度的影响着程序执行效率;
CPU在处理完一个数据后,会去处理接下来的数据,所以将内存得数据按块读取到缓存,不需要再去内存中拿数据,可以很好的提高效率,而这个块就被叫做“缓存行”;

缓存行的大小设定显得尤为重要,缓存行越大,局部效率更高,而读取时间变长,空间有效率更低;
反之越小,局部效率变低,读取时间更小,空间利用率高;64字节是业界认定非常合适的中间值,

大家看这个图,那多核CPU就会遇到这样一个问题,xy的数据在一个缓存行,第一个核将x改了,第二个核将y改了,他们再使用另一个值的时候,他们都不知道值变了,这就是缓存一致性的问题,怎么来解决这个问题呢? 看下面这个图

这里是给了缓存行四种状态:
Modified–被修改了
Exclusive–独占
Shared–共享
Invalid–无效的
当出现上述说所的情况时,第一个核需要将缓存行的状态修改为Modified,通知其他核心将自己的缓存行修改为Invalid,去内存中读取新的值;
Java代码体现:
将17行代码放开和注释掉 会有一倍的耗时差距,原因就在于long占用8字节,如果加上7个long变量,则arr[o]和arr[1]将不会处于同一缓存行,就不会涉及到核心之间的缓存行同步,

而jdk8中增加了@Contended注解解决缓存伪共享的问题,
但是需要在jvm中增加参数才能生效:
-XX:-RestructContended

从CPU缓存行说说JDK8的@Contended相关推荐

  1. 如何证明CPU缓存行cacheline的存在?

    <如何证明CPU的乱序执行(Out-of-order Execution)?> /*** 缓存行 对 内存IO的影响* 作者:荣涛* 时间:2021年4月2日*/ #define _GNU ...

  2. CPU Cache Line:CPU缓存行/缓存块

    <CPU Cache Line伪共享问题的总结和分析> 以下文章来源于小林coding ,作者小林coding Table of Contents CPU Cache 有多快? CPU C ...

  3. 从Java视角理解CPU缓存(CPU Cache)

    http://coderplay.iteye.com/blog/1485760 众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存 ...

  4. 12 张图看懂 CPU 缓存一致性与 MESI 协议,真的一致吗?

    本文已收录到  GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star.技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群. 前言 大家好 ...

  5. CPU 缓存如何影响你的 Go 程序性能

    小菜刀最近在medium上阅读了一篇高赞文章<Go and CPU Caches>,其地址为https://teivah.medium.com/go-and-cpu-caches-af5d ...

  6. CPU缓存体系对Go程序的影响

    小菜刀最近在medium上阅读了一篇高赞文章<Go and CPU Caches>,其地址为https://teivah.medium.com/go-and-cpu-caches-af5d ...

  7. Java8中@Contended和伪共享 进行缓存行填充

    Java8引入了@Contented这个新的注解来减少伪共享(False Sharing)的发生.本文介绍了@Contented注解并解释了为什么False Sharing是如何影响性能的. 缓存行 ...

  8. 「每日分享」CPU Cache 与缓存行

    您的关注.点赞.转发是对我们最大的支持 原创: kiritomoe 引言 如上述代码所示,定义了一个二维数组 long[][] arr 并且使用了横向遍历和纵向遍历两种顺序对这个二位数组进行遍历,遍历 ...

  9. 一篇对伪共享、缓存行填充和CPU缓存讲的很透彻的文章

    认识CPU Cache CPU Cache概述 随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引 ...

最新文章

  1. 分而治之_播放框架模块:分而治之
  2. 酷毙了!三种风格的全屏幻灯片效果【附源码下载】
  3. [ Javascript ] JavaScript中的定时器(Timer) 是怎样工作的!
  4. UIImage 裁剪图片和等比列缩放图片
  5. Vue3 --- axios 简单封装APi
  6. java 泛型 泛型类(Generic Classes)类型形参(Type Parameters)
  7. jQuery 查找元素节点
  8. 〖Linux〗Ubuntu13.10搭建文件共享Samba服务器
  9. 免费真实增加网站访问量的方法
  10. vscode如何配置java环境_VSCode 配置Java环境
  11. torch 中的 stft、torchaudio 中的 Spectrogram、Melscale、MelSpectrogram 的使用
  12. Raptor制作猜数游戏流程图
  13. 股票分时数据获取-东方财富
  14. 一个简体/繁体字在线转换工具源码
  15. fullpage的使用方法及配置项 (慕课网视频总结)
  16. MacOS使用conan
  17. Lua中ipairs和pairs的区别
  18. bga焊盘怎么做_BGA焊盘的设计
  19. windows RT开发笔记:WinRT DLL及其调用研究
  20. 手把手教你从分析到实现,王者荣耀壁纸爬虫!表弟馋哭了!

热门文章

  1. 使用进程、mplayer命令实现媒体播放器
  2. 微信支付(关于h5支付与JSAPI支付)
  3. vscode Go傻瓜式代码注释生成插件-GoComment
  4. JDK isn‘t specified for module ‘demo-mail‘异常的解决办法
  5. Python使用Reportlab处理PDF数据 - 其他可流动(flowable)
  6. plsql 如何创建Oracle新用户
  7. vuecli3打包规范
  8. Ubuntu 忘记密码、重置密码的方法
  9. python读取grib2数据_python2 解析 Grib/Grib2数据
  10. 【深度之眼吴恩达机器学习第四期】笔记(十一)