weixin_37405332 2021-07-27 14:17 采纳率: 25%
浏览 36

JVM和JMM对于存储共享变量的操作

“根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。 ”

JVM线程私有的,程序计数器,虚拟机栈,本地方法栈。

那么,多个线程在对同一个对象进行访问的时候,是把整个对象都从主内存拷贝到工作内存里?还是只把对象的引用变量拷贝到工作内存里?拷贝进来的变量副本储存于哪个区域呢,程序计数器?虚拟机栈?还是本地方法栈呢?

  • 写回答

3条回答 默认 最新

  • 咕泡-景天 2021-07-27 17:32
    关注

    多个线程对同一个对象进行访问,那证明这个对象是个共享变量,此时要分两种情况,一是基本数据类型,另一种是引用,如果是引用的话只会把引用复制到工作内存,其实就是我们虚拟机栈中的栈帧结构的局部变量表,程序计数器和本地方法栈不会存引用的

    评论

报告相同问题?

问题事件

  • 创建了问题 7月27日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭