关于 JMM 中 read->load 操作的疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vikeria
0.01D
V2EX    Java

关于 JMM 中 read->load 操作的疑问

  •  
  •   vikeria 2019-10-14 00:21:54 +08:00 4475 次点击
    这是一个创建于 2241 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 JMM 中,主内存和工作内存之间的交互,定义了 8 种原子操作:lock、unlock、read、load、use、assign、store。

    其中
    read(读取):作用于主内存,它把变量值从主内存传送到线程的工作内存中,以便随后的 load 动作使用;
    load(载入):作用于工作内存,它把 read 操作的值放入工作内存中的变量副本中;
    use(使用):作用于工作内存,它把工作内存中的值传递给执行引擎,每当虚拟机遇到一个需要使用这个变量的指令时候,将会执行这个动作;

    主内存实际对应 JVM 运行时数据区 中的堆,这里假设是一个 new 出来的对象
    工作内存实际对应 某一个线程中的 运行时栈帧结构中的部分(局部变量表、操作栈等等)

    其中 use,可以理解是将 变量传递到 操作栈,

    那么
    read:把变量值从主内存传送到线程的工作内存
    是从堆中传递到栈帧结构中的哪里呢?或者不是栈帧结构,又是其他什么结构呢?

    load:作用于工作内存,它把 read 操作的值放入工作内存中的变量副本中;
    是指从那边放到哪边了呢?

    一直对这边的 JMM 操作抽象与实际执行的内容有点理不清爽,有那位同学帮忙解答一下,多谢。
    7 条回复    2019-10-14 15:49:33 +08:00
    sagaxu
        1
    sagaxu  
       2019-10-14 01:50:27 +08:00 via Android   1
    read 是从内存读取到当前线程 CPU 的 cache
    vikeria
        2
    vikeria  
    OP
       2019-10-14 14:01:22 +08:00
    @sagaxu 那就相当于是这个是 jvm 针对不同的操作系统 /硬件的实现了?没有那种存在于 JVM 逻辑结构中的可以描述的方式?
    sagaxu
        3
    sagaxu  
       2019-10-14 14:42:36 +08:00 via Android
    @vikeria jvm 定义的抽象 vm,不对应任何处理器架构。jmm 的原子操作,不能定义的太细,太细了在某些平台无法实现,太粗了在某些平台要大量加锁严重降低性能。
    anofac
        4
    anofac  
       2019-10-14 14:50:30 +08:00   1
    mark,下面是我个人猜想的,还没找到权威的资料,仅做讨论哈,期待此帖出现一个大神~

    read 是从堆读出数据(一份拷贝),但还没写入线程工作内存(对应硬件上,应该在某级缓存中?)
    load 是将这份数据的拷贝写入了局部变量表中
    use 是将这份数据在需要执行的时候从局部变量表又传递到操作数栈中
    vikeria
        5
    vikeria  
    OP
       2019-10-14 15:20:15 +08:00
    @anofac 嗯,想法差不多
    Aresxue
        6
    Aresxue  
       2019-10-14 15:23:15 +08:00   1
    应该取决于 jvm 实现,Dalvik VM 都不是基于栈的指令集,栈帧和物理机构的对应也不是统一的。
    vikeria
        7
    vikeria  
    OP
       2019-10-14 15:49:33 +08:00
    @Aresxue 嗯,是的。DVM 是基于寄存器的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     902 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:50 PVG 04:50 LAX 12:50 JFK 15:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86