java内存模型
目的
java虚拟机通过试图定义一种java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的内存访问效果。
实现方式
主内存和工作内存
1.所有变量存储在主内存中
2.工作内存保存了主内存的副本拷贝
3.线程对所有变量的操作(读取、赋值)都必须在工作内存中进行
4.线程减变量值得传递都必须通过主内存来完成
内存间交互操作
【lock】作用于主内存的变量,把一个变量标识为一条线程独占
【unlock】作用于主内存的变量,把一个锁定的变量释放出来
【read】作用于主内存的变量,把一个变量从主内存中读取出来以便随后的load使用
【load】作用于工作内存的变量,把read操作获取的变量放入工作内存的变量副本中
【use】作用于工作内存的变量,使用
【assign】作用于工作内存的变量,重新赋值
【store】作用于工作内存的变量,把变量的值传入到主内存中以便随后的write操作使用
【write】作用于主内存的变量
对于volatile型变量的特殊规则
volatile变量具有两种特性:
1.保证此变量对所有线程的可见性(如果一条线程改变了这个变量的值,新值对于其他线程是立即得知的)
java的运算并非原子性的导致volatile变量的运算在并发出现不安全
2.禁止指令重排序优化