java 内存模型也是语言级别的模型。而是 java 面试不不可缺少的问题。所谓模型就是定义 java 方法内存的规则。
什么是模型呢? 模型就是以对事物的描述,描述内容包括事物的属性和行为。
内存交互操作
其实整个流程和现在快递业务比较相似
- read : 读取主内存的值,然后传输到工作内存
- load : 将read 内存值存放到工作内存
read 就是快递运输车,将货物(内存值)从货场(主内存)运送到站点(工作内存)。
load read 只是运送过去,并没有卸货 load 就是将货物加载到站点。
- use : 将工作区的变量值交给引擎处理
- assign : 引擎处理对变量进行修改
- store : 将工作内存的运输返回到主内存
- write : 将工作内存值写入主内存
快递员获取签收的凭证,返回到货站更新获取货站中货物的状态。
- lock : 用于主内存,将主内存中将一个变量表示为一个线程独占。
- unlock : 作用于主内存变量,用于解锁变量
内存指令规则
- read 和 load 以及 store 和 write 必须成对出现
- assign 操作,工作内存变量改变后必须返回到主内存
- 同一个时间只能运行一个线程对变量进行 lock,当前线程 lock 可重入,unlock 次数必须等于 lock 的次数,该变量才能解锁。
- 对一个变量 lock 后,会从工作内存中清除变量值,重新执行 load 或者 assign 操作初始化工作区的内存。
- unlock 前,必须将变量同步到主内存(store/write)操作
重排序
- 编译器重排
编译器在不改变单线程程序语句的语义的前提下,可以重排语句执行顺序 - 指令级并行的重排序
现代处理器采用了指令级并行技术实现多条指令重叠执行,在不存在数据依赖的时候,处理器可以改变指令执行的顺序
网友评论