工作内存
来源:3-2 进程和线程

红邮筒
2018-11-25
老师,你前面有说“线程是没有独立的工作内存的,他们会公用工作内存”,
可是我看很多资料上都写 “每个线程启动的时候,都会创建一片属于自己的工作内存。这片工作内存是独占式的,其他线程不能访问当前线程所属的工作内存里的变量值”,还会写到 “每个线程会把主内存中的共享变量复制一份到自己的工作内存,然后进行修改,再更新到主内存”,如果它们没有单独的工作内存,如何实现呢?难道他们是共享工作内存,但是对于某一时刻是独享的吗?
写回答
1回答
-
ccmouse
2018-11-29
你这里看到的工作内存是针对主内存讲的,在jvm中会有这种提法。这个“工作内存”就是包括栈和寄存器等的一个统称。我找了一张图
我们从内存读取数据,一般都是读取到寄存器或者栈中,然后CPU才能操作。要写的话,也是先把寄存器的值写了,然后再存到主内存中。就是所谓:“每个线程会把主内存中的共享变量复制一份到自己的工作内存,然后进行修改,再更新到主内存”
我这里说的工作内存,实际上只是“工作时使用的内存”的意思,或者,这里我说内存的时候,是没有包括寄存器和栈的。(物理上,寄存器的确不在内存里,而栈则是内存中由操作系统划出的一片保留区域)
不管如何说法,我们上述的这个运算过程都是一致的。不同的线程把主内存中的数据拷贝到寄存器之后,就有可能“看不见”其他线程对这个主内存内容的改变。这里面我在之后的9-16 Java内存模型中还会详细讲到。
00
相似问题