Java内存模型
基本概念
1. 线程通信
线程之间以何种方式进行消息传递
共享内存 & 消息传递
2. 线程同步
程序间用于控制不同线程间操作发生相对顺序的机制
java是共享内存模型】采用的是隐式通信、显式修改
jvm定义了线程和主内存(Main Memory)之间的关系:
1) 线程之间的共享变量存储在主内存中
2) 线程私有变量存储在私有本地内存 Local Memory中、
本地内存是jvm的一个抽象概念、并非真实存在、涵盖缓存、缓冲区、寄存器及其它硬件及编译器优化
Java同步原语(synchronize volatile final)
指令重排
1. 编译器重排
在不改变单线程语义的条件下、编译器可以重排指令的执行顺序
2. 指令重排
现代cpu采用了指令级并行技术、可以同时执行多条指令、若无数据依赖、
处理器可以改变机器指令的执行顺序
3. 内存系统的重排
由于处理器采用缓存和读写缓冲区、使得加载和存储操作看上去是乱序的、
可能在乱序执行
jvm 指令执行
未使用同步的程序在jvm中的执行基本无序、
1. jvm不保证单线程内的操作会按照程序代码顺序执行、临界区指令重排
2. jvm不保证所有线程看到的执行顺序一致
3. jvm不保证64位的long、double类型写操作具有原子性
网友评论