java虚拟机-java内存模型与线程

Java内存模型确保跨平台的并发一致性,定义了主内存和工作内存的交互规则。volatile关键字提供轻量级同步,保证可见性和禁止指令重排,但不保证原子性。long和double的读写可能非原子,现代虚拟机通常会视为原子操作。此外,内存模型的三大特性——原子性、可见性和有序性,通过同步原语如synchronized保证线程间操作的有序性。

java内存模型

java虚拟机规范试图定义一种java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,实现java程序在各平台下都能达到一致的并发效果。c与c++直接使用物理硬件(操作系统的内存模型),因此需要针对不同平台编写程序。

主内存和工作内存

java内存模型的主要目标是定义程序中各变量的访问规则,即虚拟机中将变量存储到内存和从内存中取出变量的底层细节。这里的变量包括实例字段静态字段,和构成数组对象的元素,因为他们在多线程下,会存在竞争不包括线程私有的局部变量和方法参数

java内存模型规定 所有变量都储存在 主内存,除此之外,每个线程还有自己的工作内存。线程的工作内存中保存了该线程使用到的变量的主内存副本拷贝,线程对于变量的所有操作都在工作内存,不能直接读写主内存。线程直接也不可以访问各自的工作内存的变量,变量值的传递通过主内存完成。
在这里插入图片描述
这里讲的内存模型和java内存区域中的堆栈不是一个层次的内存划分。

内存间的交互

主内存和工作内存的交互,通过下面八种方式来完成。

  • lock(锁定):作用于主内存变量,把变量标识为线程独占状态。
  • unlock(解锁):作用于主内存变量,把锁定的变量释放
  • read(读取):作用于主内存变量,把变量的值(只是值,不是变量)从主内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值