内存模型
Posted virgosnail
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存模型相关的知识,希望对你有一定的参考价值。
1. 硬件的效率与一致性
我们通过让计算机并发执行多个运算任务来充分利用计算机处理器的资源。但是运算任务除了计算之外还要进行IO的内存交互。由于计算机的存储设备与运算速度有几个数量级的差距,所以计算机系统都加入一层读写速度可能接近处理器运算速度的高速缓存。
1.1 高速缓存
缓存一致性问题:
在多处理器系统中,每个处理器都有自己的高速缓存,他们又共享同一主内存。当多个处理器涉及同一块主内存,可能导致各自缓存的数据不一致。
解决方案:
各个处理器访问缓存时遵循一些协议,读写数据时根据协议进行操作。比如:MSI,MESI,MOSI等。
内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。
1.2 乱序执行
为了充分利用处理器性能,除了高速缓存之外,处理器还可能对输入的代码进行乱序执行优化。
乱序执行:处理器在计算之后对乱序执行的结果重组,保证结果与顺序执行的结果一致,但不保证各个语句的执行顺序与代码顺序一致。
Java的即时编译器也有类似的指令重排序优化。
2. Java内存模型
2.1 主内存和工作内存
Java内存模型的目的:定义程序中各个变量的访问规则。即在虚拟机中将变量存储到内存和从内存中取出变量的底层细节。
此处的变量包括实例字段,静态字段和构成数组对象的元素,但是不包括局部变量和方法参数,因为它们是线程私有,不存在竞争问题。
Java内存模型规定所有的变量存储在主内存中。
线程在工作内存中保存了使用到的主内存中变量的副本拷贝,线程对变量的操作必须在工作内存中进行,不能直接读写主内存中的变量。
以上是关于内存模型的主要内容,如果未能解决你的问题,请参考以下文章