JAVA 内存模型(一)

    xiaoxiao2023-07-11  162

    综述:

    简单的说,Java的内存模型定义了在一个线程对一个共享变量进行修改后,修改后的共享变量什么时候对其它线程可见。

    作用:

    对于程序员

    JMM给程序员呈现出来的是具有顺序一致性的强内存模型。(通俗点就是所见即所得)

    对于处理器与编译器

    JMM给处理器与编译器提供了一个比较弱的happens-before内存模型,这样尽可能多的给处理器与编译器优化代码的空间。

    处理器与编译器的优化技术

    编译器优化的重排序。

    编译器在不改变单线程程序语义的前提下,可以对我们编写的代码进行重排。如下: public class Test { public static void main(String args []) { int a = 1; // 1 int b = 2; // 2 // 在单线程语义下这个程序的输出为 1 // 交换标注为 1,2 的两行代码不改变单线程程序语义 // 编译器可以对这样的代码进行指令重排,以提高程序运行的性能 System.out.println(a); } } public class Test { public static void main(String args[ ]) { int a = 0; // 1 a = 2; // 2 a = 3; // 3 // 在单线程语义下这个程序的输出为3 // 如果标注为 2 ,3的代码进行交换顺序,那就改变了单线程语义,JMM // 是禁止这种重排序的。 System.out.println(a); } }

    2 . 处理器的指令级并行重排序

    现代处理器采用了指令级并行技术,来对多条指令进行重排序。如果指令间不存在数据依赖(<u>对同一个变量写后读,读后写,写后写</u>),那处理器就可以改变指令间的执行顺序。如下: 0x00007f31c9108ac0: mov
    转载请注明原文地址: https://yun.8miu.com/read-98534.html
    最新回复(0)