01并发编程_JMM模型

Java内存模型

1基本概念:

程序:代码,完成某一件任务,代码序列(静态的概念)

进程:程序在某些数据上的一次运行(动态的概念)

线程:一个进程可能包含一个或多个线程(占有资源的独立单元)

2 JVM与线程

JVM什么时候启动?

类被调用    JVM线程---》其他的线程执行(main)

线程在JVM中

3 JVM内存区域

方法区:类信息、常量、static 、JIT(及时编译)(信息共享)

Java堆区:实例对象     GC   (信息共享)   (OOM内存溢出)

VM stack:Java方法在运行的内存模型   (OOM)

 

PC(程序计数器,线程私有):java线程的私有数据,这个数据就是执行下一条指令的地址

Native method stack:  与JVM的native (本地方法栈,线程私有)

4 Java内存模型(是一种规范)   Java memory model   JMM(规范,抽象的模型)

  1. 主内存:共享的信息
  2. 工作内存:私有信息,基本数据类型,直接分配到工作内存,引用的地址存放在工作内存,引用的对象存放在堆中
  3. 工作方式:前提是工作空间将内存数据复制到线程自己的工作空间中

              A  线程修改私有数据,直接在工作空间修改---

              B  线程修改共享数据,把数据复制到工作空间中去,在工作空间中修改,修改完成以后,刷新内存中的数据

5硬件内存架构与java内存模型

          1)硬件架构

            a) CPU缓存的一致性问题:并发处理的不同步

             b)解决方案

                   i.总线加锁()结果导致--降低CPU的吞吐量

                  ii.缓存上的一致性协议(MESI)

                     当CPU在CACHE中操作数据时,如果该数据是共享变量,数据在CACHE读到寄存器中,进行修改,并更新内存数                         据Cache LINE置无效,告诉其他CPU就从内存中读数据

          2)Java线程与硬件处理器

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

                                                                                JMSE

                      交叉:数据的不一致

        4)Java内存模型的必要性

     Java内存模型的作用:规范内存数据和工作空间数据的交互

6、并发编程的三个重要特性

          原子性:不可分割  x=1

          可见性:线程只能操作自己工作空间中的数据

 有序性:程序中的顺序不一定就是执行的顺序                   

                 编译重排序 --编译时期

                 指令重排序 --运行时期

                 重拍的目的是: 提高效率

7、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        JUC      Lock的lock

            3)JMM的有序性

                     Volatile

                     Synchronized

             Happens-before原则

                   1)程序次序原则

                   2)锁定原则  :后一次加锁必须等前一次解锁

                   3)Volatile原则:

                   4)传递原则:A先于B ,B先于C     得到   A一定先于C  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值