现代计算机大多数采用多核处理器或多处理器以提高性能,同时每个处理器通常存在一层或多层高速缓存,这将会更进一步加快对数据的访问。但是这也带来了新的挑战,即同一数据在不同处理器之间并不保证一致。所以为了保证数据的可见性,内存屏障应运而生。它能够刷新或使本地处理器高速缓存失效,以便查看其他处理器进行的写入的最新值或使该处理器的写入对其他处理器可见。而 Java 内存模型用于屏蔽不同硬件所带来的内存访问差异,以实现程序在不同平台能保证一致的并发效果。那么在并发环境下如何正确的使用内存屏障成为了首要问题。
硬件内存架构
Java 内存模型是对硬件内存模型的抽象,因此理解它需要一些硬件基础知识。这里主要介绍 处理器的存储器结构 和 处理器的高速缓存与缓存一致性
随机访问存储器(RAM)
随机访问存储器(RAM),是用于和 CPU 交换数据的内部存储器。根据存储单元的工作原理不同可以分为两类:
- 动态的存储器(DRAM)
- 静态的存储器(SRAM)
SRAM 比 DRAM 更快,但也更贵,因此 SRAM 主要作为高速缓存存储器(Cache,如 CPU 的 L1,L2),而 DRAM 则作为计算机主存。而我们常说的内存指的就是是计算机的主内存 DRAM。