JMM:Java内存模型

JMM(Java Memory Model)是Java定义的内存模型,旨在解决缓存、重排序带来的并发问题,确保可见性和有序性。它将内存分为主内存和工作内存,通过内存屏障禁止重排序,并提供关键字如volatile、synchronized、final来保证多线程间的正确通信。Happen-Before原则是其核心,定义了操作之间的先后顺序,确保并发编程的正确性。
摘要由CSDN通过智能技术生成

1.什么是 JMM
JMM 全称是 Java Memory Model. 
导致可见性问题的根本原因是缓存以及重排序。
JMM 实际上就是提供了合理的禁用缓存以及禁止重排序的方法。所以它最核心的价值在于解决可见性和有序性

JMM 属于语言级别的抽象内存模型,可以简单理解为对硬件模型的抽象,它定义了共享内存中多线程程序读写操作
的行为规范:在虚拟机中把共享变量存储到内存以及从内存中取出共享变量的底层实现细节通过这些规则来规范对内存的读写操作从而保证指令的正确性,它解决了 CPU 多级缓存、处理器优化、指令重排序导致的内存访问问题,保证了并发场景下的可见性。

JMM 把底层的问题抽象到 JVM 层面,再基于 CPU 层面提供的内存屏障指令,以及限制编译器的重排序来解决并发问题。

2.JMM 抽象模型分为主内存、工作内存
主内存:是所有线程共享的,一般是实例对象、静态字段、数组对象等存储在堆内存中的变量。
工作内存:是每个线程独占的,线程对变量的所有操作都必须在工作内存中进行,不能直接读写主内存中的变量。
线程之间的共享变量值的传递都是基于主内存来完成。
Java 内存模型底层实现可以简单的认为:通过内存屏障(memory barrier)禁止重排序。

3.JMM 是如何解决可见性有序性问题的
JMM 提供了一些禁用缓存以及禁止重排序的方法,来解决可见性和有序性问题。
对程序提供的API关键字:volatile、synchronized、final;

4.JMM  如何解决顺序一致性问题
从源代码到最终执行的指令,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值