java 对象 模型_java对象模型

之前聊过java内存区域(参见java内存区域),还有一个叫java内存模型(JMM,Java Memory Model)的,都是基于JVM特有的概念,名字看起很像,说的却是两码事。内存区域是JVM管理内存的手段,通过划分区域方便管理;而内存模型是JVM定义的一种规范,定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。前者是横向的,告诉我们内存这个地盘怎么瓜分;后者是一种过程的规则,用来告诉我们虚拟机中怎么把变量存储到内存,又是怎么从内存中取出来的。需要注意的是,这里的变量特指程序员理解的全局变量。

要知道啥是JMM,就得先明白两个概念:主内存和工作内存。我们可以借助java内存区域来理解内存模型:主内存可以理解为java内存区域里的java堆中的对象实例数据,它是线程共享的,而工作内存就是虚拟机栈,它是线程私有的。主内存是虚拟机的,所有线程均可以使用,而工作内存是给每个线程自己特有的,别的线程无法使用,而且工作内存中保存了该线程用到的主内存中的变量的拷贝副本。明白了这两个内存的不同点之后,接下来就好理解了。那么究竟JVM是怎么规定变量的存储和取出的呢?

既然主内存是共享内存区域,那么理应让所有线程均可访问,但线程对变量的所有操作(读取、赋值等),必须在工作内存中进行。首先要将变量从主内存拷贝的自己的工作内存空间(变量:主内存 -> 工作内存,在工作内存中成了拷贝的副本),然后线程对变量的拷贝副本进行操作,操作完成后再由工作内存将变量写回主内存。线程本身不能直接读写主内存中的变量。

不同的线程之间也无法彼此互相访问工作内存的变量,而需要借助主内存这个中间人来交流。线程、工作内存、主内存的关系图如下:

aa4c9f25622847ae974d872d9634282e.png

关于主内存与工作内存之间具体的交互协议这里就不细说了。

原文:https://www.cnblogs.com/wuxun1997/p/10336420.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值