请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于内存模型的几个问题

1.能不能去掉工作内存,只用一个主内存呢?如果只用一块内存,不就可以避免多值的问题了,划分成工作内存与主内存的好处在哪里
2.我看基于当前内存模型,介绍了8种内存操作,这些操作为啥我在开发的时候没用过呢,是因为JVM自动帮我做了?比如我在方法中去获取并修改堆中对象,就涉及到了这些内存操作是么
3.为什么要分成read和load呢,单纯的read并没有意义,直接设计个read+load的原子操作不可以么,一开始这么设计的原因是什么啊,同理还有use、assgin,write、store都是感觉一个就可以了

希望老师帮忙解答,感谢

正在回答 回答被采纳积分+3

1回答

CC老师 2022-12-30 11:22:27

第一个问题:不能去掉工作内存,因为Java内存模型要处理多线程调用的情况,如果都在主内存操作,就会发生数据并发修改的问题,所以,每个线程都是操作自己的工作内存,也就是主内存数据的副本。


第二个问题:Java内存模型是由JVM来实现和控制的,不需要开发人员直接操作,我们只是需要去理解它的机制和原理,以加深对JVM的理解。


第三个问题:单独分成read和load的原因主要有两个,一个是所有内存的操作,最终还是要映射到物理内存的操作上,一般操作系统给出的内存操作指令,都是单独功能的指令,不会有组合的功能指令,JMM中借鉴这个设计;  另外一个更重要的原因就是:为了多线程操作的灵活,Java内存模型只是要求 read 后面 跟 load,也就是只要求了 顺序,但并没有要求read和load必须连着,也就是 read操作 和  load操作中间,是可以有其他操作的,比如:对于两个线程,分别从主内存中读取变量A和B的值,并不一定要read A; load A; read B; load B; 也可以是:read A; read B; load B; load A;


其它的同理,就不多描述了。

1 回复 有任何疑惑可以回复我~
  • 提问者 qq_君君晨晨_0 #1
    感谢老师的回答,看了您的回答,我对这些问题有了了解。但总感觉理解的不那么深刻,比如这8种内存操作在JVM中到底是什么样的代码,还有您回答里提到了操作系统的一些东西,都想去了解。
    针对这种情况,您感觉是去看看JVM的源码好呢,还是去学学操作系统好呢,还是都要去看看
    回复 有任何疑惑可以回复我~ 2023-01-01 16:47:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信