运行时内存-CPU多级缓存

本文介绍了CPU多级缓存的基本原理,包括CPU缓存出现的原因、缓存行的定义与伪共享问题及其解决方案,以及缓存一致性(MESI协议)的核心思想和状态转换。理解这些内容有助于优化Java应用程序的性能。
摘要由CSDN通过智能技术生成

5.3. CPU多级缓存

5.3.1. CPU缓存基本介绍

1)CPU缓存出现的原因
CPU的频率太快,快到主存跟不上,这样在处理器时钟周期内,CPU经常需要等待主存,浪费资源。所以缓存的出现,是为了缓解CPU和内存间速度的不匹配问题。(结论:CPU>缓存>主存)
2)CPU缓存的意义
1)时间局部性:如果某个数据被访问,那么在不久的将来它很有可能会被再次访问。
2)空间局部性:如果某个数据被访问,那么与它相邻的数据很快也能被访问。
3)多核系统中的缓存设置意义
在典型的多核系统中,每一个核心都会有自己的缓存来共享主存总线,每一个CPU都会发出读写请求,而缓存的目的就是为了减少CPU读写共享主存的次数。

5.3.2. 缓存行

1)缓存行的定义
缓存是由缓存行组成的,CPU读取缓存都是以缓存行的形式读取,通常是 64 字节(常用处理器的缓存行是 64 字节的,比较旧的处理器缓存行是 32 字节),并且它有效地引用主内存中的一块地址。在程序运行的过程中,缓存每次更新都从主内存中加载连续的 64 个字节。因此,如果访问一个 long 类型的数组时,当数组中的一个值被加载到缓存中时,另外 7 个元素也会被加载到缓存中。
在这里插入图片描述

注:a. 一个 Java 的 long 类型是 8 字节,因此在一个缓存行中可以存 8 个 long 类型的变量。b.如果使用的数据结构中的项在内存中不是彼此相邻的,比如链表,那么将得不到免费缓存加载带来的好处。
2)伪共享问题
a.定义:当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享问题。
b.样例介绍:设想如果有个 long 类型的变量 a,它不是数组的一部分,而是一个单独的变量,并且还有另外一个 long 类型的变量 b 紧挨着它,那么当加载 a

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值