“根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。 ”
JVM线程私有的,程序计数器,虚拟机栈,本地方法栈。
那么,多个线程在对同一个对象进行访问的时候,是把整个对象都从主内存拷贝到工作内存里?还是只把对象的引用变量拷贝到工作内存里?拷贝进来的变量副本储存于哪个区域呢,程序计数器?虚拟机栈?还是本地方法栈呢?
多个线程对同一个对象进行访问,那证明这个对象是个共享变量,此时要分两种情况,一是基本数据类型,另一种是引用,如果是引用的话只会把引用复制到工作内存,其实就是我们虚拟机栈中的栈帧结构的局部变量表,程序计数器和本地方法栈不会存引用的
程序计数器只存储字节码行号,本地方法栈只是用来执行native方法
是数据副本,在线程的工作内存中。
JMM和内存结构,即运行时数据区是不同的概念,题目说的程序计数器,虚拟机栈,还是本地方法栈,都是运行时数据区的东西