JAVA内存模型JMM

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 JAVA内存模型JMM,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

基本概念

程序:完成某一任务的代码序列(静态概念)
进程:程序在某些数据上的一次运行(动态概念)
线程:一个进程可能包含多个线程,是占有资源的独立单元。

JVM是在类被调用的时候启动的

JVM内存区域

image.png
本地方法栈:与jvm虚拟机的native方法有关
堆区:实例对象、GC;会发生OOM (信息共享)
方法区:类信息classload()、常量、static、JIT;利用反射去加载 (信息共享)
PC:程序计数器,java线程的私有数据,这个数据就是执行下一条指令的地址
VM Stack:java方法在运行时的内存模型;会发生OOM
image.png

JAVA内存模型(规范) JMM

Java memory model JMM 抽象的模型
image.png
工作空间:是一块专门分配给线程的内存区域,只能由这个线程去操作,每个线程都有其工作空间(栈区)。
工作内存:私有信息。如果是基本数据类型,直接分配到工作空间;如果是引用数据类型,引用地址存放在工作内存,引用对象存放在堆中。
工作方法:A线程修改私有数据,直接在工作空间修改;B线程修改共享数据,把数据复制到工作空间去,在工作空间中修改,完成以后刷新内存中的数据。
主内存:共享的信息

JVM是按照JMM规范划分的

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

1.硬件架构

硬件的处理过程:
image.png

2.cpu缓存一致性的问题

并发处理的不同步
解决方案:
(1)总线加锁(降低cpu的吞吐量) BUS
(2)缓存一致性协议(MESI):当cpu在cache中操作数据时,如果该数据是共享变量,数据在cache中读到寄存器中进行修改并更新内存数据,cache line置无效,其他的cpu读取数据就从内存中读取。

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

工作空间和内存的数据都可能存在于寄存器、cache、内存中
image.png

4.java线程和硬件处理器

image.png

5.java内存模型的必要性

规范内存数据和工作空间数据的交互。

并发编程的三个重要特征

原子性:不可分割
可见性:线程只能操作自己工作空间的数据
有序性:程序中的顺序不一定就是执行的顺序,存在编译重排序(代码优化)和指令重排序(指令优化),可以提高程序效率。
单线程中重排后不影响执行的效果
as-if-serial :排序后运行的结果和程序的结果一致
happens-before

JMM对三个特征的保证

JMM与原子性

1.X=10 写 原子性 如果是私有数据具有原子性,如果是共享数据没原子性(读写)
2.Y=x 没有原子性

  1. 把数据X读到工作空间(原子性)
  2. 把X的值写到Y(原子性)

3.I++ 没有原子性

  1. 读i到工作空间
  2. +1;
  3. 刷新结果到内存

4.Z=z+1 没有原子性

  1. 读z到工作空间
  2. +1;
  3. 刷新结果到内存

多个原子性的操作合并到一起没有原子性
保证方式:
Synchronized
JUC Lock的lock

JMM与可见性

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

JMM与有序性

Volatile:
Synchronized:
Happens-before原则:

  1. 程序次序原则,程序次序集的结果不能变
  2. 锁定原则 :后一次加锁必须等前一次解锁
  3. Volatile原则:霸道原则
  4. 传递原则:A—B —C A–C,a必须在c前面执行

根据happens-before原则,符合的程序就可以重排

总结

  1. JVM内存区域和JMM的关系
  2. JMM和硬件的关系
  3. JMM和并发编程三个重要特征(有序性 as-if-seria happens-before )

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/143793.html

(0)

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!