意义

JVM定义内存模型来屏蔽掉各种硬件与操作系统的内存访问差异,一实现让Java程序在各种平台下都能达到一致的访问效果

 

字典表

  • 变量:实例字段静态字段和构成数组对象的元素等,但不包括局部变量和方法参数(线程私有)
  • 主内存:就是物理硬件的内存
  • 工作内存:每个线程都有一个工作内存,存储了使用的主内存副本拷贝,线程的操作必须在工作内存中执行,然后再返回给主内存

 

内存间的操作

 

操作解释

  1. lock:将变量锁住,在一个时间内只让一条线程使用
  2. unlock:释放变量锁
  3. read:线程把变量从主内存读到工作内存
  4. load:把read读到的内存载入
  5. use:将变量传给执行引擎使用
  6. assgin:执行引擎使用变量完成后变量赋值到工作内存
  7. store:工作内存将变量从工作内存存储到主内存
  8. write:主内存将工作内存要求store的变量写入

 

使用规则

  • read与load,store与write必须成对出现
  • 变量在工作内存改变后必须同步到主内存
  • 没有assign的变量不能写回主内存
  • 工作内存不能产生新变量,所有变量都必须从主内存中获取
  • 主内存对某变量执行lock后会清空工作内存该变量的值
  • 对一个变量执行unlock之前,必须先将其同步到主内存

 参考《深入理解Java虚拟机》--p365