美文网首页
指令重排

指令重排

作者: 红烧鸡翅膀_我喜欢吃 | 来源:发表于2020-03-19 10:38 被阅读0次

jvm做的一种优化策略,为了提高cpu的利用率,更改了指令执行顺序。

单线程下:jvm保证的指令执行的基本有序性,即happen-before原则,更改后顺序不影响原有结果。

对于多线程不保证。

为了兼容多线程,还有以下重排原则,可以通过代码层面保证重排不影响执行结果

1、锁定规则:这个规则比较好理解,无论是在单线程环境还是多线程环境,一个锁处于被锁定状态,那么必须先执行unlock操作后面才能进行lock操作。

2、volatile变量规则:这是一条比较重要的规则,它标志着volatile保证了线程可见性。通俗点讲就是如果一个线程先去写一个volatile变量,然后一个线程去读这个变量,那么这个写操作一定是happens-before读操作的。

3、传递规则:提现了happens-before原则具有传递性,即A happens-before B , B happens-before C,那么A happens-before C

4、线程终结规则:假定线程A在执行的过程中,通过制定ThreadB.join()等待线程B终止,那么线程B在终止之前对共享变量的修改在线程A等待返回后可见。

---------------------------------------------------------------------------

相关文章

  • 指令重排(Happens-Before法则)

    1.什么是指令重排 程序指令的执行顺序有可能和代码的顺序不一致,这个过程就称之为指令重排。 2.指令重排的作用 J...

  • Java笔记1--volatile&CAS&集合

    volatile保证有序性(禁止指令重排) volatile总结 volatile实现禁止指令重排优化,从而避免多...

  • Java 并发模型

    在之前的文章中,我们了解到了计算机为什么会出现指令重排、指令重排引起的问题、为了解决指令重排而引入的缓存一致性和内...

  • 指令重排

    指令重排 指令重排序是JVM为了优化指令,提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度...

  • 指令重排

    jvm做的一种优化策略,为了提高cpu的利用率,更改了指令执行顺序。 单线程下:jvm保证的指令执行的基本有序性,...

  • 指令重排

  • Java多线程实现基础(二)

    Java内存模型 基本概念 指令重排 jvm 指令执行

  • 指令重排序和内存屏障

    一:指令重排序 指令乱序有两种情况,一种是编译器做的优化,另外一种就是cpu流水线操作指令的延迟性。指令重排序是指...

  • 我理解的volatile

    volatile语义 volatile有两层语义:可见性和禁止指令重排序。什么是可见性和指令重排序,在这里就不解释...

  • Java指令重排序

    Java指令重排序Java内存模型允许编译器和处理器对指令重排序以提高运行性能,并且只会对不存在数据依赖性的指令重...

网友评论

      本文标题:指令重排

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