美文网首页
JMM 内存间交互操作

JMM 内存间交互操作

作者: SlowGO | 来源:发表于2019-01-14 19:04 被阅读9次

    Java内存模型规定了所有的变量都存储在主存中,每个线程都有自己的工作内存,工作内存中保存了该线程要用到的主存中变量的副本,线程对变量的操作都是在工作内存中完成,不能直接操作主存,线程之间也无法直接访问其他线程的工作内存,线程间变量值的传递需要通过主存来完成,这就涉及到了主存与工作内存间的交互操作。

    Java内存模型中定义了8种操作来完成,虚拟机保证了每种操作都是原子的。

    • lock(锁定):作用于主存的变量,把一个变量标识为一条线程独占状态。
    • unlock(解锁):作用于主存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。
    • read(读取):作用于主存变量,把一个变量的值从主存传输到工作内存。
    • load(载入):作用于工作内存变量,把 read 来的值放入工作内存的变量副本中。
    • use(使用):作用于工作内存变量,把工作内存中一个变量的值传递给执行引擎,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。
    • store(存储):作用于工作内存变量,把工作内存中一个变量的值传送到主存。
    • write(写入):作用于主存变量,把 store 操作从工作内存中得到的变量的值放入主存的变量中。

    如果要把一个变量从主存复制到工作内存:顺序执行 readload 操作。

    如果要把变量从工作内存同步会主存:顺序执行 storewrite 操作。

    注意:JMM 只是规定了必须顺序执行,而没有保证是连续执行,其间可以插入其他指令。

    相关文章

      网友评论

          本文标题:JMM 内存间交互操作

          本文链接:https://www.haomeiwen.com/subject/uyijdqtx.html