Java内存模型(Java Memory Model)

444 阅读2分钟
  1. 本质:规定JVM中将变量存储到内存和从内存中取出变量规范。
  2. 组成:主内存、工作内存。
  3. 8个基本操作:
  • lock (锁定) ,作用于主内存的变量,它把一个变量标识为一条线程独占的状态。
  • unlock (解锁) ,作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。
  • read (读取) ,作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的 load 动作使用。
  • load (载入) ,作用于工作内存的变量,它把 read 操作从主内存中得到的变量值放入工作内存的变量副本中。
  • use (使用) ,作用于工作内存的变量,它把工作内存中一个变量的值传递给执行引擎,每当虚拟机遇到一个需要使用到变量的值的字节码指令时就会执行这个操作。
  • assign (赋值) ,作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。
  • store (存储) ,作用于工作内存的变量,它把工作内存中一个变量的值传送到主内存中,以便随后 write 操作使用。
  • write (写入) ,作用于主内存的变量,它把 Store 操作从工作内存中得到的变量的值放入主内存的变量中。
  1. 运行规则
    1、内存交互基本操作的 3 个特性
    2、happens-before 关系
    3、内存屏障
    4、8 种操作同步的规则
    5、volatile 型变量的特殊规则
    6、final 型变量的特殊规则
    7、long 和 double 型变量的特殊规则

参考:
zhuanlan.zhihu.com/p/51613784