JVM内存与线程
2019-05-10 本文已影响0人
CanZh
Java内存模型
缓存一致性
计算机的存储设备与处理器之间的运算速度存在几个数量级的差距,所以,在处理器和内存之间加上一层读写速度级尽可能接近处理器运算速度的高速缓存(Cache)作为缓存:将运算需要使用到的数据复制到缓存中,让运算能快速运行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。
以上过程导致了缓存一致性问题:
在多处理器系统中,每个处理器都有自己的高速缓存,而他们有共享同一块主存(Main Memory),当多个处理器的运算结果都涉及同一块主存区域时,将可能导致各自缓存的数据不一致的情况。如果发生这种情况,那同步回主存的数据该以谁的缓存数据为准呢?所以,各个处理器在访问缓存时都需要遵循一些协议:MSI、MESI、MOSI、Synape、Firefly、Dragron protocol等
Java虚拟机内存模型中定义的内存访问操作与硬件的缓存访问操作是具备可比性的。
指令重重排序:
为乐是处理器内部的运算单元尽量被充分利用,处理器会对输入代码进行乱序执行优化,处理器会在计算完成之后将乱序执行的结果重组,保证结果与顺序执行的结果一致,但并不能保证程序中各条输入语句计算的先后顺序与输入代码中顺序一致。Java虚拟机中的即时编译器中也存在类似的指令重排序优化。
JAVA内存模型