JVM将内存组织为主内存和工作内存两个部分。

主内存是所有的线程所共享的,主要包括本地方法区和堆。

每个线程都有一个工作内存不是共享的,工作内存中主要包括两个部分:

1:一个是属于该线程私有的栈;

2:对主存部分变量拷贝的寄存器(包括程序计数器PC和cup工作的高速缓存区)。

1.所有的变量都存储在主内存中(虚拟机内存的一部分),对于所有线程都是共享的。

2.每条线程都有自己的工作内存,工作内存中保存的是主存中某些变量的拷贝,
线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。
3.线程之间无法直接访问对方的工作内存中的变量,线程间变量的传递均需要通过主内存来完成,即:线程、主内存、工作内存。

JVM规范定义了线程对内存间交互操作:

Lock(锁定):作用于主内存中的变量,把一个变量标识为一条线程独占的状态。

Read(读取):作用于主内存中的变量,把一个变量的值从主内存传输到线程的工作内存中。

Load(加载):作用于工作内存中的变量,把read操作从主内存中得到的变量的值放入工作内存的变量副本中。

Use(使用):作用于工作内存中的变量,把工作内存中一个变量的值传递给执行引擎。

Assign(赋值):作用于工作内存中的变量,把一个从执行引擎接收到的值赋值给工作内存中的变量。

Store(存储):作用于工作内存中的变量,把工作内存中的一个变量的值传送到主内存中。

Write(写入):作用于主内存中的变量,把store操作从工作内存中得到的变量的值放入主内存的变量中。

Unlock(解锁):作用于主内存中的变量,把一个处于锁定状态的变量释放出来,之后可被其它线程锁定。

在将变量从主内存读取到工作内存中,必须顺序执行read、load;
要将变量从工作内存同步回主内存中,必须顺序执行store、write。
8种操作必须遵循以下规则:

1:不允许read和load、store和write操作之一单独出现。即不允许一个变量从主内存被读取了,但是工作内存不接受,或者从工作内存回写了但是主内存不接受。
2:不允许一个线程丢弃它最近的一个assign操作,即变量在工作内存被更改后必须同步改更改回主内存。
3:工作内存中的变量在没有执行过assign操作时,不允许无意义的同步回主内存。
4:在执行use前必须已执行load,在执行store前必须已执行assign。
5:一个变量在同一时刻只允许一个线程对其执行lock操作,一个线程可以对同一个变量执行多次lock,但必须执行相同次数的unlock操作才可解锁。
6:一个线程在lock一个变量的时候,将会清空工作内存中的此变量的值,执行引擎在use前必须重新read和load。
7:线程不允许unlock其他线程的lock操作。并且unlock操作必须是在本线程的lock操作之后。

8:在执行unlock之前,必须首先执行了store和write操作。

最新文章

  1. Mono 3.2 上跑NUnit测试
  2. Mac系统下使用VirtualBox虚拟机安装win7--第四步 安装虚拟机硬件扩展包支持
  3. 微信公共平台开发2 .net
  4. html列表
  5. xss概念剖析
  6. C# 中的命名规则
  7. java基础(二十)IO流(三)
  8. Node.js权威指南 (11) - 加密与压缩
  9. 第33讲 UI组件_进度条ProcessBar和消息队列处理器handler
  10. hdu 1210_(逻辑训练)
  11. Springboot+resteasy定时任务
  12. [2017-08-25]100行CSharp代码利用dynamic写个DSL(特定领域语言)
  13. DataFrame使用总结1(超实用)
  14. NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.web.servlet.view.InternalResourceViewResolver' available
  15. Python3——坦克大战
  16. jsp内置对象的作用范围
  17. NOI-OJ 2.2 ID:6261 汉诺塔
  18. HTTP请求中GET和POST的区别
  19. shell 构建脚本基础
  20. ThinkPhp框架分页查询和部分框架知识

热门文章

  1. bs4笔记
  2. Ubuntu 18.04设置1920*1080
  3. java调用js脚本
  4. JavaScript 异步和单线程
  5. 让IIS支持解析.json格式文件
  6. DB2分页
  7. Mybatis插件之Mybatis-Plus的实体类注解篇
  8. javascript当中类型转换,typeof的用法
  9. TCP连接可能出现的异常总结
  10. Block Breaker HDU - 6699(深搜,水,写下涨涨记性)