zoukankan      html  css  js  c++  java
  • Java内存模型(JMM)

    JVM与线程(线程在JVM中)

    1、JVM什么时候启动?

            类被调用时启动,此时会启动JVM线程然后再是其他的线程(main)

    2、JVM内存区域

    除了程序计数器(PC)之外都有可能发生内存溢出
    方法区:类信息、常量、static 、JIT 、(信息共享)(OOM)
    Java堆区:实例对象、GC、(信息共享) (OOM)
    VM stack:Java方法在运行的内存模型   (OOM)
    PC:java线程的私有数据,这个数据就是执行下一条指令的地址
    Native method stack:  与JVM的native(00M)
    
    3、Java内存模型 Java memory model JMM(规范,抽象的模型)

    1)主内存:共享的信息
    2)工作内存:私有信息,基本数据类型,直接分配到工作内存,引用的地址存放在工作内存,引用的对象存放在堆中
    3)工作方式:
          A  线程修改私有数据,直接在工作空间修改
          B  线程修改共享数据,把数据复制到工作空间中去,在工作空间中修改,修改完成以后,刷新内存中的数据
    
    4、硬件内存架构与java内存模型

        1)硬件架构

    
    a)CPU缓存的一致性问题:并发处理的不同步
    b)解决方案:
    i.总线加锁()  降低CPU的吞吐量
    ii.缓存上的一致性协议(MESI)
        当CPU在CACHE中操作数据时,如果该数据是共享变量,数据在CACHE读到寄存器中,进行新修改,并更新内存数据
        CaCHE  LINE置无效,其他的CPU就从内存中读数据
    

        2)Java线程与硬件处理器

        3)Java内存模型与硬件内存架构的关系

    5、并发编程的三个重要特性
    原子性:不可分割  x=1
    可见性:线程只能操作自己工作空间中的数据
    有序性:程序中的顺序不一定就是执行的顺序
            编译重排序
            指令重排序
    
    6、JMM对三个特征的保证

        1)JMM与原子性

        A) X=10  写  原子性   如果是私有数据具有原子性,如果是共享数据没原子性(读写) 
        B) Y=x  没有原子性
            a)把数据X读到工作空间(原子性)
            b)把X的值写到Y(原子性)
        C)I++ 没有原子性
            a)读i到工作空间
            b)+1;
            c)刷新结果到内存
        D) Z=z+1 没有原子性
            a)读z到工作空间
            b)+1;
            c)刷新结果到内存
    
    多个原子性的操作合并到一起没有原子性
    保证方式:
        Synchronized
        JUC    Lock的lock锁

        2)JMM与可见性

        Volatile:在JMM模型上实现MESI协议
        Synchronized:加锁
        JUC   Lock的lock锁
    

        3)JMM与有序性

         Volatile
         Synchronized
         Happens-before原则
            1)程序次序原则
            2)锁定原则  :后一次加锁必须等前一次解锁
            3)Volatile原则:霸道原则
            4)传递原则:A---B ---C    A--C
    
  • 相关阅读:
    [笔记]JavaScript 秘密花园
    jQuery效果之jQuery Color animation 色彩动画扩展
    【vue】常见开发知识点与问题整理(持续更新)
    JS ES6中的箭头函数(Arrow Functions)使用
    JS之console.log详解以及兄弟姐们邻居方法扩展
    字符编码ASCII、Unicode 、UTF-8 及实例汉字与Unicode码的相互转化
    JS之表单提交时编码类型enctype详解
    JS之onunload、onbeforeunload事件详解
    《从零开始学习jQuery》:用jQuery操作元素的属性与样式
    vue+vuecli+webpack中使用mockjs模拟后端数据
  • 原文地址:https://www.cnblogs.com/liulong99/p/11899580.html
Copyright © 2011-2022 走看看