java内存模型

1、JVM内存区域

  • 方法区:类信息、常量、static、JIT (信息共享)
  • java堆:实例对象 GC (信息共享) OOM
  • VM stack:JAVA方法在运行的内存模型 (OOM)
  • PC: java线程的私有数据,这个数据就是执行下一条指令的地址
  • Native method stack: 月JVM的native

2、java内存模型(JMM 规范、抽象的模型)

  • 主内存:共享的信息
  • 工作内存:私有信息、基本数据类型,直接分配到主内存,引用的地址放在工作内存中,引用的对象放在堆中
  • 工作方式:
    • 线程修改私有数据,直接在工作内存修改
    • 线程修改共享数据,把数据复制到工作空间中,在工作空间中修改,修改完之后,刷新到主内存中

3、 硬件内存架构月java内存模型

cpu缓存的一致性问题:并发处理的不同步
解决方法:
- 总线加锁 降低了CPU的吞吐量
- 缓存上的一致性协议(MESI)<br>
    当cpu在cache中操作数据时,如果该数据是共享变量,数据在cache读到寄存器中,进行新修改,并更新内存数据<br>
    cache line值无效,其他的cpu就从内存中读数据

4、 并发编程的三个重要特征

原子性、可见性和有序性

  • 原子性保证方式:
    • synchronized
    • JUC Lock的lock
  • 可见性
    • volatile:在JMM模型上实现MESI协议
    • synchronized:加锁
    • JUC Lock的lock
  • 有序性
    • Volatile禁止重排序
    • synchronized
    • happens-before原则
      • 程序次序原则
      • 锁定原则:后一次加锁必须等前一次解锁
      • Volatile原则:霸道原则
      • 传递原则:A--B--C A--C
posted on 2019-10-11 11:29  YL10000  阅读(138)  评论(0编辑  收藏  举报