1.主内存和工作内存

Java内存模型的主要目的是定义程序中各种变量的访问规则,及如何在虚拟机中把变量值存储到内存和从内存中读取变量值。这里所指的变量包括实例字段、静态字段、构成数组对象的元素,但是不包括局部变量和方法参数,因为局部变量和方法参数为线程私有,不会被共享,所以不存在竞争问题。
Java内存模型定义所有变量都存在主内存(Main Memory)中,此内存仅仅是虚拟机内存的一部分。每个线程有自己的工作内存(Working Memory),线程的工作内存中保存了被该线程使用的变量的主内存副本。线程对变量的所有操作(读取/赋值)都必须在工作内存中完成,不能直接读写主内存中的数据。不同线程之间也无法直接访问其他线程的工作内存中的变量,线程间变量值的传递需要通过主内存来完成。

2.内存间的交互操作

Java内存模型定义了八种操作来完成变量从主内存拷贝到工作内存以及从工作内存同步回主内存。

  • lock(锁定)
    作用于主内存变量,把一个变量标记为线程独占状态。
  • unlock(解锁)
    作用于主内存变量,把一个变量从线程独占状态解锁释放出来,释放后变量才能被其他线程锁定。
    -read(读取))
    作用于主内存变量,把变量值从主内存传输到线程到工作内存中,为线程的load操作做准备。
    -load(载入))
    作用于工作内存变量,把read从主内存中得到的变量值放入工作内存的变量副本中。
  • use(使用))
    作用于工作内存变量,把变量值传递给执行引擎,当虚拟机需要使用到变量值时执行。
  • assign(赋值))
    作用于工作内存变量,把从执行引擎接收的值赋值给工作内存变量,当虚拟机遇到变量赋值指令时执行。
  • store(存储))
    作用于工作内存变量,把工作内存中变量的值传递回主内存,为write做准备。
  • write(写入))
    作用于主内存变量,把从工作内存中得到的变量值写回主内存的变量中。

把变量从主内存拷贝到工作内存需要严格按照顺序:read -> load;
把变量从工作内存同步回主内存需要严格按照顺序:store -> write;
上述两组操作只要求按照顺序执行,但是不要求连续执行(即:read和load之间、store和write之间可以插入其他的指令)。

3.volatitle变量的特殊处理

Java内存模型(Java Memory Model,简称JMM)相关推荐

  1. Java内存模型(Java Memory Molde,JMM)

    文章目录 1.Java内存模型(Java Memory Molde,JMM) 2. 多线程先行发生原则之happens-before 1.Java内存模型(Java Memory Molde,JMM) ...

  2. Java内存模型(Java Memory Model,JMM)

    导读 本文通过对JSR133规范的解读,详细的介绍JMM的核心理论,并将开发中常用的关键字的实现原来做了详细的介绍.通过本文读者可以了解到并发的一些基本理论,并对一些同步原语有了更深层次的理解.希望读 ...

  3. 第十六章:Java内存模型——Java并发编程实战

    一.什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺 ...

  4. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )

    文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...

  5. java内存 海子_Android 面试经验 - Java 内存模型 - Java 技术驿站-Java 技术驿站

    Java内存模型 目录 Java执行流程 Java文件被编译成字节码文件之后,由JVM中的类加载器进行加载,加载完毕之后,交由JVM的执行引擎执行.在程序执行的过程中,JVM会用一段空间来存储数据和相 ...

  6. Java 内存模型(Java Memory Model,JMM)

    为了屏蔽各种硬件和操作系统的内存访问差异,JVM制定了一套JMM内存模型来实现同一套Java程序在不同平台上实现一样的运行效果.也就是一次编译到处运行跨平台的效果. JVM内存分配概念 JVM两个重要 ...

  7. 稀疏内存模型sparsemem memory model | 文章

    文章推荐 <sparsemem memory model>https://lwn.net/Articles/134804/ <Physical Memory Model>htt ...

  8. Java 内存模型 JMM 详解

    转载自 Java 内存模型 JMM 详解 JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性.是否可以重排序等问题的无关具体 ...

  9. Java并发指南6:Java内存模型JMM总结

    本文转自 https://www.cnblogs.com/kukri/p/9109639.html 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库 ...

  10. 一文读懂Java内存模型(JMM)及volatile关键字

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 并发编程从操作系统底层工作的整 ...

最新文章

  1. MyBatis-06 MyBatis XML方式之多个接口参数用法
  2. 寻仙新马源码一键端_强大,腾讯开源前后端接口开发工具!
  3. 利用 PGO 提升 .NET 程序性能
  4. HTML5新增的主体结构元素
  5. 微软的正则表达式教程(一):正则表达式简介
  6. Shell——运行Shell脚本
  7. 《交互式程序设计 第2版》一2.2 代码的本质
  8. 12v电源正负极区分_弱电工程UPS电源如何安装?如何配置计算?故障如何处理?...
  9. envi 面向对象遥感图像分类
  10. 玩客云pc端_移动端灵活弹性云电销平台解决方案
  11. 计算机网络代表第几次革命,互联网:人类生产力的第三次革命
  12. livezilla安装指南
  13. n个单词输入次数 c语言,C语言问题,从键盘输入n个英语单词.输入格式为n,w1,w2,w3…wn,其中n表示随后输入的英语...
  14. 解决Linux图片加水印(Graphics2D)出现方框的问题
  15. android --------- Android10系统上访问本地相机下的视频文件报错 /storage/emulated/0/DCIM/Camera/ open failed: EACCES
  16. Python基础——修改Python字典中的key(键)
  17. ***详解账号泄露:全球约1亿用户已泄露
  18. 物流企业竞争优势及竞争力体系的构建 (zt)
  19. 排列的生成(二) —— 序数法
  20. python猜字游戏_python入门到实践-猜字游戏

热门文章

  1. eclipsenbsp;mavennbsp;pluginamp;n…
  2. 实现多个输入框的dialog
  3. 用Jenkins编译asp.net
  4. 我对软件开发的一点思考
  5. 两个datatable的比较
  6. XReport报表工具技术白皮书
  7. [Vue.js]实战 -- 电商项目(六)
  8. [Node.js] mySQL数据库 -- 数据库的基本操作
  9. CSS3概述、选择器、兼容性、样式
  10. css中设置微软雅黑时,在ie6css中有些样式会失效的解决办法