Java内存模型与volatile关键字
1 Java内存模型(JMM)的意义 JMM 与硬件内存架构对应关系 JMM抽象结构图 Java虚拟机规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,规定 线程如何,何时能看到其他线程修改过的共享变量的值 在必要时如何同步地访问共享变量 以实现让Java程序在各种平台下都能达到一致性的内存访问效果。 2 主内存与工作内存 Java内存模型的主要目标是定义各个变量的访问规则 即在虚拟机中将变量存储到内存和从内存中取出变量值这样的底层细节 此处的变量包括了实例域,静态域和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不存在竞争 为了获得比较好的执行效率,JMM并没有限制执行引擎使用处理器的特定寄存器或缓存来和主内存进行交互,也没有限制即时编译器调整代码执行顺序这类权限。 JMM规定 所有的变量都存储在主内存(Main Memory) 每条线程有自己的工作内存(Working Memory) 保存了该线程使用到的变量的主内存副本拷贝(线程所访问对象的引用或者对象中某个在线程访问到的字段,不会是整个对象的拷贝!) 线程对变量的所有操作(读,赋...