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内存结构

  • 相关阅读:
    NOJ 1116 哈罗哈的大披萨 【淡蓝】 状态压缩DP
    优先队列原理与实现【转】
    testC-I
    济南NOIP冬令营 选拔(select)
    P4747 D’s problem(d)
    P4746 C’s problem(c)
    P4745 B’s problem(b)
    P4744 A’s problem(a)
    [bzoj] 1004: [HNOI2008]Cards
    NOIP2013 表达式求值
  • 原文地址:https://www.cnblogs.com/riches/p/13255034.html
Copyright © 2011-2022 走看看