主内存与工作内存
java内存模型规定了所有的变量都存储在主内存(Main Memory)中。每条线程还有自己的工作内存(Working Memory),线程的工作内存中保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据。线程间变量值的传递均需要通过主内存来完成。
内存间交互操作
-
lock(锁定)
作用于主内存的变量,把一个变量标识为一条线程独占的状态 -
unlock(解锁)
作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定 -
read(读取)
作用于主内存的变量,把一个变量的值从主内存传输到线程的工作内存中,以便所有的load动作使用 -
load(载入)
作用于工作内存的变量,把read操作从主内存中得到的变量值放入工作内存的变量副本中 -
use(使用)
作用于工作内存的变量,把工作内存中一个变量的值传递给执行引擎,每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作 -
assign(赋值)
作用于工作内存的变量,把一个从执行引擎接收的值赋