JAVA内存模型以及happens before规则 - omigaw/spring- GitHub Wiki
1.JMM内存结构抽象结构示意图
线程A ————> 本地内存A(共享变量的副本)_JMM控制__>主内存(共享变量)
线程B ————> 本地内存B(共享变量的副本)_JMM控制__>主内存(共享变量)
2.JMM设计示意图
程序员(程序员基于happens-before规则提供的内存可见性保证来编程) ---->happens-before规则---->要求禁止
----->会改变程序执行结果的重排序---->编译器(要求禁止)
3.JMM的介绍
在多线程条件下,多个线程肯定会相互协作完成一件事情,一般来说就会涉及到多个线程间相互通信告知彼此的状态以及当前的执行结果等,另外,为了性能优化,还会涉及到编译器指令重排序和处理器指令重排序。
4.重排序
源代码————>1.编译器优化重排序————>2.指令级并行重排序————>3.内存系统重排序————>最终执行的指令序列。
5.happens-before规则
6.今后可能需要关注的问题
7.
源代码————>编译器优化重排序————>指令级并行重排序————>内存系统重排序————>最终执行的指令序列。