CPU 缓存模型
为什么要弄一个 CPU 高速缓存呢?
- 系统使用的缓存(比如 Redis)是为了解决
程序处理速度和访问常规关系型数据库速度不对等的问题。 - CPU 缓存则是为了解决
CPU 处理速度和内存处理速度不对等的问题.
总结:
内存缓存的是硬盘数据,用于解决硬盘访问速度过慢的问题。
CPU Cache 缓存的是内存数据,用于解决 CPU 处理速度和内存不匹配的问题。
CPU Cache 的工作方式:
先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。
但是,这样存在 内存缓存不一致性的问题 !
JMM(Java 内存模型)
当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。
要解决这个问题,就需要把变量声明为 volatile ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。
所以,volatile 关键字 除了防止 JVM 的指令重排 ,还有一个重要的作用就是保证变量的可见性。
版权声明:本文为weixin_37646636原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。