从CPU缓存行说说JDK8的@Contended
从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相关推荐
- 如何证明CPU缓存行cacheline的存在?
<如何证明CPU的乱序执行(Out-of-order Execution)?> /*** 缓存行 对 内存IO的影响* 作者:荣涛* 时间:2021年4月2日*/ #define _GNU ...
- CPU Cache Line:CPU缓存行/缓存块
<CPU Cache Line伪共享问题的总结和分析> 以下文章来源于小林coding ,作者小林coding Table of Contents CPU Cache 有多快? CPU C ...
- 从Java视角理解CPU缓存(CPU Cache)
http://coderplay.iteye.com/blog/1485760 众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存 ...
- 12 张图看懂 CPU 缓存一致性与 MESI 协议,真的一致吗?
本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star.技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群. 前言 大家好 ...
- CPU 缓存如何影响你的 Go 程序性能
小菜刀最近在medium上阅读了一篇高赞文章<Go and CPU Caches>,其地址为https://teivah.medium.com/go-and-cpu-caches-af5d ...
- CPU缓存体系对Go程序的影响
小菜刀最近在medium上阅读了一篇高赞文章<Go and CPU Caches>,其地址为https://teivah.medium.com/go-and-cpu-caches-af5d ...
- Java8中@Contended和伪共享 进行缓存行填充
Java8引入了@Contented这个新的注解来减少伪共享(False Sharing)的发生.本文介绍了@Contented注解并解释了为什么False Sharing是如何影响性能的. 缓存行 ...
- 「每日分享」CPU Cache 与缓存行
您的关注.点赞.转发是对我们最大的支持 原创: kiritomoe 引言 如上述代码所示,定义了一个二维数组 long[][] arr 并且使用了横向遍历和纵向遍历两种顺序对这个二位数组进行遍历,遍历 ...
- 一篇对伪共享、缓存行填充和CPU缓存讲的很透彻的文章
认识CPU Cache CPU Cache概述 随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引 ...
最新文章
- 分而治之_播放框架模块:分而治之
- 酷毙了!三种风格的全屏幻灯片效果【附源码下载】
- [ Javascript ] JavaScript中的定时器(Timer) 是怎样工作的!
- UIImage 裁剪图片和等比列缩放图片
- Vue3 --- axios 简单封装APi
- java 泛型 泛型类(Generic Classes)类型形参(Type Parameters)
- jQuery 查找元素节点
- 〖Linux〗Ubuntu13.10搭建文件共享Samba服务器
- 免费真实增加网站访问量的方法
- vscode如何配置java环境_VSCode 配置Java环境
- torch 中的 stft、torchaudio 中的 Spectrogram、Melscale、MelSpectrogram 的使用
- Raptor制作猜数游戏流程图
- 股票分时数据获取-东方财富
- 一个简体/繁体字在线转换工具源码
- fullpage的使用方法及配置项 (慕课网视频总结)
- MacOS使用conan
- Lua中ipairs和pairs的区别
- bga焊盘怎么做_BGA焊盘的设计
- windows RT开发笔记:WinRT DLL及其调用研究
- 手把手教你从分析到实现,王者荣耀壁纸爬虫!表弟馋哭了!
热门文章
- 使用进程、mplayer命令实现媒体播放器
- 微信支付(关于h5支付与JSAPI支付)
- vscode Go傻瓜式代码注释生成插件-GoComment
- JDK isn‘t specified for module ‘demo-mail‘异常的解决办法
- Python使用Reportlab处理PDF数据 - 其他可流动(flowable)
- plsql 如何创建Oracle新用户
- vuecli3打包规范
- Ubuntu 忘记密码、重置密码的方法
- python读取grib2数据_python2 解析 Grib/Grib2数据
- 【深度之眼吴恩达机器学习第四期】笔记(十一)