Java并发学习(一)

java内存模型

1 基本概念

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

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

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

2 JVM与线程

jvm什么时候启动? 类被调用  JVM线程 --> 其他线程(main)

线程在jvm中

3 JVM内存区域  (按照JMM规范划分的最终的结果)

 

方法区: 类信息,常量,static,JIT(java即时编译)     反射去加载类 classload    (信息共享)

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

虚拟机栈: java方法在运行时的内存模型   (OOM)   如下图

 

程序计数器: java线程的私有数据,执行下一条指令的地址

本地方法栈:虚拟机的native方法有关

 

4 Java内存模型   java memory model  JMM(规范 抽象模型)

1) 主内存:共享的信息

2) 工作内存(工作空间): 私有信息 ,基本数据类型->直接分配到工作内存,引用类型->引用的地址存放在工作内存(工作空间),引用的对象存放在堆中(主内存)

3) 工作方式

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

    B  线程修改共享数据,把数据复制到工作空间中去,进行修改,刷新内存中的数据

    这样设置的方式  是为了保证线程之间的不可见性。 

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

1)

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

  b) 解决方案: 

     i.  总线加锁 (BUS) 将内存完全锁起来 一次只让一个cpu进行范围操作    降低cpu的吞吐量

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

           当cpu在Cache操作数据时,如果该数据是共享变量,数据在Cache中读到寄存器中,进行修改,并更新内存数据

           Cache Line置成无效 ,其他的cpu就从内存中读数据

2)java线程与硬件处理器

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

交叉: 数据的不一致

4)java内存模型的必要性 

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

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

原子性 : 不可分割  

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

有序性 : 程序中的顺序不一定就是执行循序。    (当多行代码执行的顺序对结果没有影响的时候【无数据相关的时候】,会进行重排序)。 as-if-seria:在单线程中重排后不影响执行结果。   多线程  happens-before。

          编译时重排序

          指令重排序

                提高效率。(操作指令的时间有关系)

7 JMM对三个特征的保证

1)JMM与原子性

     A)x = 10  写操作 具有原子性。 如果是私有数据具有原子性,如果是共享数据就没有原子性。(共享数据需要先读后写)

     B) y = x   没有原子性

                  把数据x读到工作空间(具有原子性) 

                   把x的值写到y中去(具有原子性) 

                   两个操作一起不具有原子性

     C) i++ 没有原子性   

               读i到工作空间

                +1

                刷新结果到内存

      D)  Z = z + 1  没有原子性 

    多个原子性的操作合并到一起没有原子性。

  保证方式 :

      Synchronized  (加锁)

     JUC   Lock的lock

2)JMM与可见性

  Volatile (在JMM模型上实现了MESI协议)    执行较快

  Synchronized :加锁  (执行较慢)

  JUC   Lock的lock        执行较慢)

3)JMM与有序性 

  Volatile

  Synchronized 

  happens-before原则:

     1) 程序次序原则    程序次序决定的结果不能改变

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

     3)  Volatile原则  : 霸道原则 , 加了Volatile修饰的变量执行顺序不可变

     4) 传递原则: A---B---C      A---C

 

总结

   JVM内存区域和JMM关系 : JVM利用JMM规范来进行实际内存区域的划分。JVM是java虚拟机实际内存的划分。

  JMM和硬件的关系 

  JMM和并发编程三个重要特征。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值