zoukankan      html  css  js  c++  java
  • 指令重排序

    什么是指令重排序

      java语言规范JVM线程内部维持顺序化语义,即只要程序的最终结果与它顺序化情况的结果相等,那么指令的执行顺序可以与代码逻辑不一致,这个过程就叫做执行重排序;

      在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序,重排序分为三种类型:

        1.编译器优化的重排序:编译器在不改变单线程程序的语义下,可以重新安排语句的执行顺序;

        2.指令级并行重排序:线程处理器采用了指令级并行技术来将多条指令重叠执行;如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序;

        3.内存系统重排序:由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱执行;

      最终执行的指令序列示意图

        

      上述的1属于编译器重排序,2和3属于处理器重排序;这些重排序可能会导致多线程程序出现内存可见性问题;对于编译器,JMM的编译器重排序规则会禁止特定类型的编译器重排序;对于处理器重排序,JMM的处理器重排序规则会要求java编译器在生成指令序列时,插入特定类型的内存屏障指令,通过内存屏障指令来禁止特定类型处理器重排序;

    内存屏障

      为了保证可见性,java编译器在生成指令序列的适当位置会插入内存屏障指令来禁止特定类型的处理器重排序;

      内存屏障类型表

        

        StoreLoad Barriers是一个“全能型”的屏障,它同时具有其他三个屏障的效果;

  • 相关阅读:
    读取web.xml中设置的参数
    在服务端中,读取properties资源文件中的数据
    window下,nodejs安装http-server,并开启HTTP服务器
    跨域请求资源的方式
    IView 给Submenu增加click事件失效解决方案
    Vue -- mounted方法中调用methods的方法(并取出mounted方法中回调函数的值)
    IView 使用Table组件时实现给某一列添加click事件
    物联网协议CoAP协议学习
    电脑操作
    物联网协议
  • 原文地址:https://www.cnblogs.com/wnwn/p/12580883.html
Copyright © 2011-2022 走看看