在 JMM 中,主内存和工作内存之间的交互,定义了 8 种原子操作:lock、unlock、read、load、use、assign、store。
其中
read(读取):作用于主内存,它把变量值从主内存传送到线程的工作内存中,以便随后的 load 动作使用;
load(载入):作用于工作内存,它把 read 操作的值放入工作内存中的变量副本中;
use(使用):作用于工作内存,它把工作内存中的值传递给执行引擎,每当虚拟机遇到一个需要使用这个变量的指令时候,将会执行这个动作;
主内存实际对应 JVM 运行时数据区 中的堆,这里假设是一个 new 出来的对象
工作内存实际对应 某一个线程中的 运行时栈帧结构中的部分(局部变量表、操作栈等等)
其中 use,可以理解是将 变量传递到 操作栈,
那么
read:把变量值从主内存传送到线程的工作内存
是从堆中传递到栈帧结构中的哪里呢?或者不是栈帧结构,又是其他什么结构呢?
load:作用于工作内存,它把 read 操作的值放入工作内存中的变量副本中;
是指从那边放到哪边了呢?
一直对这边的 JMM 操作抽象与实际执行的内容有点理不清爽,有那位同学帮忙解答一下,多谢。
其中
read(读取):作用于主内存,它把变量值从主内存传送到线程的工作内存中,以便随后的 load 动作使用;
load(载入):作用于工作内存,它把 read 操作的值放入工作内存中的变量副本中;
use(使用):作用于工作内存,它把工作内存中的值传递给执行引擎,每当虚拟机遇到一个需要使用这个变量的指令时候,将会执行这个动作;
主内存实际对应 JVM 运行时数据区 中的堆,这里假设是一个 new 出来的对象
工作内存实际对应 某一个线程中的 运行时栈帧结构中的部分(局部变量表、操作栈等等)
其中 use,可以理解是将 变量传递到 操作栈,
那么
read:把变量值从主内存传送到线程的工作内存
是从堆中传递到栈帧结构中的哪里呢?或者不是栈帧结构,又是其他什么结构呢?
load:作用于工作内存,它把 read 操作的值放入工作内存中的变量副本中;
是指从那边放到哪边了呢?
一直对这边的 JMM 操作抽象与实际执行的内容有点理不清爽,有那位同学帮忙解答一下,多谢。