zoukankan      html  css  js  c++  java
  • JVM学习(七)JMM内存模型

    一、什么是JMM

      概念:Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。

      图示:

        

       解析:首先我们要明确一点:内存模型主要是影响线程共享的内存可见性问题,Java线程之间的通信由Java内存模型【JMM】控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见

      从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:

    • 线程之间的共享变量存储在主内存(main memory)
    • 每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。

      本地内存是JMM的一个抽象概念,并不真实存在,它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。

    二、JMM在线程通信中起到的作用

      线程A与线程B之间如要通信的话,必须要经历下面2个步骤:

    • 首先,线程A把本地内存A中更新过的共享变量刷新到主内存中去。
    • 然后,线程B到主内存中去读取线程A之前已更新过的共享变量。

      下面通过示意图来说明这两个步骤:

       解析:如上图所示,本地内存A和B有主内存中共享变量x的副本,那么在实现通信时,JMM内存模型是这样展现的:

    • 假设初始时,这三个内存中的x值都为0。
    • 线程A在执行时,把更新后的x值(假设值为1)临时存放在自己的本地内存A中。
    • 当线程A和线程B需要通信时,线程A首先会把自己本地内存中修改后的x值刷新到主内存中,此时主内存中的x值变为了1。
    • 随后,线程B到主内存中去读取线程A更新后的x值,此时线程B的本地内存的x值也变为了1,线程通信完成

    三、JMM内存模型与JVM内存结构的区别

    JMM【Java内存模型】:Java Memory Model,指的在java程序运行过程中,计算机有主内存,每个java线程有自己的工作内存。java线程的工作内存是计算机主内存的拷贝。

    JVM内存结构:讲的是Java虚拟机内存的结构划分,包括堆区,栈区,方法区等。

    图示:

    JMM内存模型

    JVM内存结构

  • 相关阅读:
    共享纸巾更换主板代码分析 共享纸巾主板更换后的对接代码
    Python Django Ajax 传递列表数据
    Python Django migrate 报错解决办法
    Python 创建字典的多种方式
    Python 两个list合并成一个字典
    Python 正则 re.sub替换
    python Django Ajax基础
    Python Django 获取表单数据的三种方式
    python Django html 模板循环条件
    Python Django ORM 字段类型、参数、外键操作
  • 原文地址:https://www.cnblogs.com/riches/p/13255034.html
Copyright © 2011-2022 走看看