java内存模型

首先要注意Java内存模型与Java运行时数据区域的区别:

java内存模型:是一套Java虚拟机规范,是为了屏蔽掉各种硬件和操作系统的内存访问差异,可以让Java程序在各种平台都能达到一致的并发效果。

java运行时数据区域:java虚拟机在执行java程序时会把虚拟机所管理的内存区域,划分为若干区域,包括:程序计数器(寄存器),虚拟机栈,本地方法栈,方法区,堆

Java内存模型:

Java内存模型主要目标是定义程序中各个变量访问规则,即在虚拟机中,将变量存储到内存和从内存中取出变量这样的底层细节。此处变量指的是:实例字段、静态字段、构成数组对象的元素。不包括线程私有的局部变量和方法参数。

Java内存模型规定:java虚拟机内存分主内存和工作内存。所有变量都存储在注内存中,每个线程都拥有自己的工作内存。线程的工作内存中保存了局部变量,方法参数和被该线程使用到的变量的主内存副本拷贝。

Java内存模型和Java运行时数据区域不是同一个层次的概念划分。Java内存模型中的主内存对应于java堆中对象实例数据部分,工作内存对应于虚拟机栈中的部分区域。

 

内存之前的交互操作有:lock, read, load, use, assign, store, write, unlock

Lock:把一个变量标识为一条线程独占的状态

Read:把一个变量的值从主内存传输到线程的工作内存中

Load:把read操作中从主内存中得到的变量值放入工作内存的变量副本中

Use:把工作内存中一个变量副本的值传递为执行引擎

Assign:把一个从执行引擎接收到的值赋值给工作内存中的变量副本

Store:把一个工作内存中变量副本的值传送到主内存中

Write:把store操作从工作内存中得到的值放入主内存的变量中

Unlock:把一个处于锁定状态的变量释放出来,释放后的变量才能被其他线程锁定

其中作用于主内存的操作:lock,read,write,unlock

作用于工作内存的操作:load,use,assign,store

Java内存模型的这8个操作都是原子的,但是double和long型数据可能有例外,对于64位的数据类型,Java内存模型允许将没有被volatile修饰的64位数据的读写操作划分为两次32位的操作来进行。

Java运行时数据区域:

参看:java内存运行时数据区域 https://blog.csdn.net/qq_26881739/article/details/81031759

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值