从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. Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
  2. NetBeans优化技巧 提升启动速度
  3. [前端优化]使用Microsoft Ajax Minifier对资源文件进行压缩优化
  4. linux下安装oracle 11g R2
  5. leveldb使用指南
  6. 提示账户不被允许使用docker的情况
  7. 获取路径传过来的地址 截取参数
  8. mysql 1054 42s22_MySQL 触发器的坑:ERROR 1054 (42S22): Unknown column 'xxx' in 'field list'
  9. DNS服务器之二:从服务器的实现
  10. JS生成随机数并排序
  11. Solr 4.10.3 集成 IK Analyzer 2012FF 中文分词器
  12. unity天空盒渐变,Unity 3D从一个天空盒淡入另一个天空盒
  13. w ndows7手机桌面,Windows 7中有哪些常用的桌面小工具
  14. macd的VB计算机程序,大智慧自选股实时同步到通达信VB小软件简单升级
  15. mybatis generator 使用文档
  16. RSA/数字证书/签名原理详解
  17. php 2038,PHP转换超过2038年的日期出错问题解决
  18. PWM频率与占空比的关系
  19. chatgpt 的强大让你慌了么?趁着还有点理智,跟着我看看怎么玩吧!
  20. 单片机学习笔记————为指针加上紧箍咒const,避免意外修改了只做输入接口的数据

热门文章

  1. Java中如何输入一个数组
  2. 使用亮数据Bright Data解决出境电商问题
  3. 冀永楠:OCR的应用锦集及背后技术
  4. sql数据库中修改列名的方法
  5. 艾美捷曲妥珠单抗Trastuzumab化学性质和特异性说明
  6. 搜索引擎、邮件营销、微信营销之营销方式大PK
  7. CAT中实现异步请求的调用链查看
  8. conda cudf 升级_cuDF
  9. C语言中的 #include <stdio.h>是什么?
  10. D2Admin自制数据的增删改查