最近学习了java虚拟机内存模型部分,做了一份关于内存间交互操作的图例。
1、 java 内存模型的主要目标是定义程序中各个变量的访问规则,在虚拟机中使用内存中的变量以及将变量存储到内存中的的一些细节。模型规定所有的变量存储在主内存中,每条线程有自己的工作内存,线程对变量的操作在各自的工作内存中进行,不同的线程之间的工作内存之间不能直接访问,线程间的变量值的传递需要通过主内存完成。java线程、工作内存、主内存的交互如下
2、内存间交互操作。主内存和工作内存之间的交互协议(变量从主内存中拷贝到工作内存中,从工作内存中同步到主内存中的细节),java 内存模型定义了一个8种操作来完成,虚拟机实现的时候保证操作是原子的,不可分割的。
lock :作用于主内存变量,表示一个线程独占一个变量,其他线程不可占用。
unlock : 作用于主内存变量,解除一个变量的锁定状态,解除后其他线程才可以占用。
read :作用于主内存变量,把主内存中的变量值传输到线程工作内存中去。
load : 作用于工作内存变量,将 read操作得到的变量值赋 工作内存中变量副本。
use : 作用于工作内存变量,将工作内存中的变量传送给 执行引擎
assign : 作用于工作内存变量,将执行引擎得到的值 赋给 工作内存变量副本。