Java内存模型和内存间的交互操作
Java内存模型、内存间的交互操作
多线程的可见性、有序性和指令重拍、线程安全的处理方法
锁优化:自旋锁、锁消除、锁粗化、轻量级锁、偏向锁等
Java内存模型
JCP定义了一种Java内存模型,以前是在JVM规范,后来独立出来成为JSP-133(Java内存模型和线程规范修订)
内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象
Java内存模型主要关注JVM中把变量值存储到内存和从内存中取出变量值这样的底层细节
所有变量(共享的)都存储在主内存中,每个线程都有自己的工作内存,工作内存中保存该线程使用到的变量的主内存的副本拷贝。
线程对变量的所有操作(读、写)都应该在工作内存中完成。
不同线程不能相互访问工作内存,交互数据要通过主内存
内存间的交互操作
Java内存模型规定了一些操作来实现内存间交互,JVM会保证他们是原子的。
lock:锁定,把变量标识为线程独占,作用于主内存变量
unlock:解锁,把锁定的变量释放,别的线程才能使用,作用于主内存变量
(必须同一个线程进行加锁和解锁)
read:读取,把变量值从主内存读取到工作内存
load:载入,把read读取到的值放入工作内存的变量副本中
use:使用,把工作内存中的一个变量值传递给执行引擎。
assign:赋值,把从执行引擎接收到的值赋给工作内存里面的变量
store:存储,把工作内存中一个变量的值传递到主内存中
write:写入,把store进行的数据存放入主内存的变量中