Java 的内存模型(Java Memory Mode,JMM)指定了 Java 虚拟机如何与计算机的主存(RAM)进行工作。
Java 的内存模型决定了一个线程对共享变量的写入何时对其他线程可见,Java 内存模型定义了线程和主内存之间的抽象关系。具体如下。
假设主内存的共享变量为0,线程1和线程2分别拥有共享变量X的副本,假设线程1此时将工作内存中的X修改为1,同时刷新到主内存,当线程2想要去使用副本X的时候,就会发现该变量已经失效了,必须到主内存再次获取然后存入自己工作内存中,这一点和 CPU 和 CPU Cache 之间的关系非常类似。
Java 内存模型是一个抽象的概念,其与计算机硬件的结构并不完全一样,比如计算机物理内存不会存在栈内存和堆内存的划分,无论是堆内存还是虚拟机栈内存都会对应到物理的主内存,当然也有一部分堆栈内存的数据可能会存入 CPU Cache 和 寄存器中。下图是 Java 内存模型与 CPU 硬件架构交互图。
当同一个数据被分别存储到计算机的各个内存区域时,势必会导致多个线程在各自的工作区域中看到数据有可能不一样的,在 Java 语言中如何保证不同线程对某个共享变量的可见性呢?volatile 这个关键字就亮相了。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/123960077
内容来源于网络,如有侵权,请联系作者删除!