在java内存模型中有工作内存和主内存,主内存是所有线程共享的内存区域,规定变量都必须存储在主内存中。但是在jvm运行时数据区中,又谈到所有局部变量都存储在栈中,而栈又是线程私有的,对应到内存模型中就是工作内存。相应主内存对应的就是运行时数据区的堆。这不就产生了矛盾吗?**对与局部变量到底是按照内存模型来说存储在主内存中,还是栈中呢?**
2 回答

HUX布斯
TA贡献1876条经验 获得超6个赞
jvm内存模型和java内存模型是两回事。 java内存模型是为了解决多线程对共享数据访问保持一致性,即规定了jvm怎么协调虚拟内存和主内存关系
对于JMM与JVM本身的内存模型,参照《深入理解Java虚拟机》周志明的解释,这两者本没有关系。如果一定要勉强对应,那从变量、主内存、工作内存的定义来看,主内存主要对应于Java堆中的对象实例数据部分,而工作内存则对应于虚拟机栈中的部分区域,。从更低层次上说,主内存就是物理内存,而为了获取更好的执行速度,虚拟机(甚至是硬件系统本身的优化措施)可能会让工作内存优先存储于寄存器和高速缓存中,因为运行时主要访问—读写的是工作内存
添加回答
举报
0/150
提交
取消