一、内存模型

内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象.

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/558192/1621416059318-21b32d79-562f-4fb9-9176-1f16b3d1b3f9.png#clientId=u7d171460-78eb-4&from=paste&height=428&id=u44e0ea2b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=856&originWidth=952&originalType=binary&size=350319&status=done&style=none&taskId=u6a8fc500-535d-406b-9890-2a3a7efd0ba&width=476)
  • 共享变量存放主内存,每个线程都有自己的工作内存;工作内存中保存该线程使用到的变量的主内存副本拷贝。
  • 线程对变量的所有操作(读、写)都应该在工作内存中完成。
  • 不同线程不能访问工作内存,交互数据要通过主内存

二、内存交互

  • JVM内存模型规定一些操作实现内存间交互,JVM保证原子性
  • lock: 锁定,把变量标示为线程独占,作用于主内存变量
  • unlock: 解锁,锁定变量释放,别的线程才能使用,作用于主内存变量
  1. read:读取,把变量从主内存读取到工作内存
  2. load:载入,对象赋值
  3. use:使用,把工作内存变量值传递给执行引擎
  4. assign:赋值,从执行引擎接收到的值赋给工作内存里面的变量(变量值改变)
  5. store:存储,把工作内存中变量值传递到主内存
  6. write:写入,把store的值存放到主内存变量中