hi,你好,我是猿java
最近一个多月,一直在整理 JMM(Java内存模型)相关的知识,因为 JMM 和 CPU cache(CPU 缓存)密不可分,
可以毫不夸张地说:掌握 CPU cache(CPU 缓存)是理解 JMM(Java内存模型)的关键和前提。
因此,本文将全面分析 CPU cache,这样可以帮助我们更好地理解下文的 JMM原理。
计算机缓存 {#计算机缓存}
计算机缓存,主要分为两类:DRAM 和 SRAM
DRAM {#DRAM}
DRAM 是安装在主板上的动态随机存取存储器(Dynamic Random Access Memory),也就是常规意义的内存条,用于存储正在运行的程序和数据。
DRAM 的特点和工作原理:
- 动态性:DRAM 是一种动态存储器,使用电容器存储数据,这些电容器必须经常用电不断地动态更新,以存储数据。这与静态随机存取存储器(SRAM)不同,SRAM 不需要刷新操作。
- 随机存取:DRAM 允许随机存取存储器中的任何位置,因此可以快速读取和写入数据。这使得 DRAM 成为主要的系统内存类型。
- 存储容量:DRAM 的存储容量通常比 SRAM 大得多,因此被广泛用于计算机系统的主内存中。
- 刷新操作:由于 DRAM 的存储单元是由电容器组成的,这些电容器会逐渐失去电荷,因此需要定期刷新以防止数据丢失。刷新操作会在存储周期性地重写存储单元中的数据,以确保数据的持续性。
- 相对廉价:与其他类型的存储器相比,DRAM 相对廉价,因此被广泛应用于个人电脑、服务器和其他计算设备的内存中。
- 稳定性:需要充电来存储数据,因此,断电后就容易丢数据。
SRAM {#SRAM}
SRAM 指的是静态随机存取存储器(Static Random Access Memory),SRAM 通常是指 CPU缓存,用于临时存储正在运行的程序和数据。
SRAM 的特点和工作原理:
- 静态性:不需要定期刷新以保持存储的数据,访问速度比 DRAM 快。
- 稳定性:由于 SRAM 的存储单元是由触发器(flip-flop)组成的,它们可以保持数据的状态,即使在没有电源的情况下也可以保持数据。这使得 SRAM 更加稳定,不易丢失数据。
- 速度:由于 SRAM 的存储单元是触发器而不是电容器,因此它们的响应速度更快,访问时间更短,与 DRAM 相比,SRAM 的读取速度更快。
- 功耗:尽管 SRAM 的访问速度快,但它的功耗相对较高。这是因为 SRAM 的存储单元需要使用额外的电力来保持其状态,即使在不访问数据时也是如此。
- 用途:由于 SRAM 的快速访问速度和稳定性,它通常用于需要快速访问的高性能计算设备,例如高速缓存、寄存器文件和高性能处理器内部的存储。
CPU 缓存 {#CPU-缓存}
CPU缓存,也就是我们上面说的 SRAM,它是 CPU内部的存储器。
CPU 缓存分级 {#CPU-缓存分级}
老的 CPU有两级内存(L1和L2),新的 CPU有三级内存(L1,L2,L3 ),如下图所示:
其中:
- L1和 L2缓存分别存存在每一个 CPU核中,L3是所有 CPU核心共享
- 存取速度: L1 > L2 > L3,即越离 CPU越近,速度越快
- 存储容量:L3 > L2 > L1,即越离 CPU越近,容量越小
交流学习 {#交流学习}
如果文章存在缺点和错误,欢迎批评指正。更多干货和面试经,关注公众号:猿java。