JAVA内存模型

2019-05-13  本文已影响0人  Jenny的小迷妹啊

1.主内存和工作内存

Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。

JAVA内存模型规定

2.内存间的交互操作

主内存和工作内存的交互协议

简略示意图

主内存和工作内存的交互协议.jpg

如果要把一个变量从主内存复制到工作内存,那就要按顺序执行read和load操作。
如果要把变量从工作内存同步到主内存,就要按顺序执行store和write操作。
注意:Java内存模型只要求上述两个操作必须按照顺序执行,但是没有保证必须要连续执行,其中可以插入其他指令。比如:对主内存中的变量a、b进行访问时,可能出现操作顺序是:read a、read b、load b、load a的情况。

Java内存模型规定

3.volatile

volatile 特性

//比如我们代码里面的顺序是这样
a=1+2;
b=2;
c=a+1;
//实际执行的时候,可能进行优化,使b=2提前执行等。

注意:volatile能保证可见性,但是不能保证原子性,对变量执行类似于 a++的操作的时候,还是需要通过加锁来保证原子性。

volatile是怎么保证可见性的?

被volatile修饰的变量,会在每次读取变量前从主内存刷新变量的值,再进行读取。通过依赖主内存作为传递媒介的方式来实现可见性。

上一篇 下一篇

猜你喜欢

热点阅读