12.1 Java内存模型,主内存和工作内存

1. 什么是Java内存模型?(JMM)

  • Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,来实现让 Java 程序在各种平台下都能达到一致的内存访问效果。处理器的读写速度比内存快几个数量级,为了解决这种速度矛盾,在它们之间加入了高速缓存。每个处理器都有自己的高速缓存,而它们又共享同一主内存,可能操作同一位置引起各自缓存不一致,所以还在高速缓存和主内存之间加入了缓存一致性协议。(Volatile可以解决这个问题 )
  • Java 内存模型有三个特性:
    • 原子性是指一个操作不可以被中断
    • 可见性是指一个线程修改了共享变量的值,其他线程能立即知道这个修改。Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值来实现可见性的。
    • 有序性:程序执行时可能进行指令重排,重排后的指令与原指令的顺序可能不一致。可以使用 Volatile 关键字添加内存屏障来禁止指令重排。
      12.1 Java内存模型,主内存和工作内存_第1张图片

2. 主内存和工作内存

  • Java 内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。它规定了所有的变量都存储在主内存中,每条线程有自己的工作内存,工作内存保存了被该线程使用到的变量的主内存副本,线程对变量的读取、赋值等操作都必须在工作内存中进行,而不能直接读写主内存中的变量,不同线程也无法直接访问对方工作内存中的变量。线程间变量值的传递需要通过主内存来完成。

12.1 Java内存模型,主内存和工作内存_第2张图片

你可能感兴趣的:(JVM)