Java内存模型和内存间的交互操作

Java内存模型和内存间的交互操作

  1. Java内存模型、内存间的交互操作

  2. 多线程的可见性、有序性和指令重拍、线程安全的处理方法

  3. 锁优化:自旋锁、锁消除、锁粗化、轻量级锁、偏向锁等

Java内存模型

JCP定义了一种Java内存模型,以前是在JVM规范,后来独立出来成为JSP-133(Java内存模型和线程规范修订)

内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象

Java内存模型主要关注JVM中把变量值存储到内存和从内存中取出变量值这样的底层细节

所有变量(共享的)都存储在主内存中,每个线程都有自己的工作内存,工作内存中保存该线程使用到的变量的主内存的副本拷贝。

线程对变量的所有操作(读、写)都应该在工作内存中完成。

不同线程不能相互访问工作内存,交互数据要通过主内存

内存间的交互操作

Java内存模型规定了一些操作来实现内存间交互,JVM会保证他们是原子的。

lock:锁定,把变量标识为线程独占,作用于主内存变量

unlock:解锁,把锁定的变量释放,别的线程才能使用,作用于主内存变量

(必须同一个线程进行加锁和解锁)

read:读取,把变量值从主内存读取到工作内存

load:载入,把read读取到的值放入工作内存的变量副本中

use:使用,把工作内存中的一个变量值传递给执行引擎。

assign:赋值,把从执行引擎接收到的值赋给工作内存里面的变量

store:存储,把工作内存中一个变量的值传递到主内存中

write:写入,把store进行的数据存放入主内存的变量中

---- The end of this article ----