什么是主内存,工作内存
这2个概念是Java内存模型(Java Memory Model)中提出的,我们目前只需要知道内存模型是帮我们屏蔽底层硬件细节的,程序员只需要按照它的规则来写代码,写的程序就可以实现跨平台运行,很巧妙的设计。
了解了内存模型,我们回到主题,我们知道JVM将内存划分了以下几大块
-
堆 (进程内所有线程共享)
-
方法区 (进程内所有线程共享)
-
虚拟机栈 (每个线程独立)
-
native本地方法栈 (每个线程独立)
-
pc计数器 (每个线程独立)
那主内存,工作内存跟它们的对应关系是怎么样的呢? 这里直接给出结论。
-
主内存就是堆 + 方法区
-
工作内存就是虚拟机栈 + native本地方法栈 + pc计数器
这个知识点看似不起眼,但是却很重要,因为只有有了这个结论,才能与我们后面的实际代码例子结合起来,否则就会感觉理论与实际操作脱节了,没法对应起来。
举个例子:
有一个Counter计数器类,内部有一个count成员变量int类型,记录当前的总数,具体定义如下。
public class Counter {
pr