由于内存与cpu的缓存运算速度有几个数量级的差距,所以如果将运算数据加载到cpu的缓存中运算提高运算速度,然后结束后再从缓存同步回内存之中。可是这样带来了一个问题 缓存一致性。每个处理器核心都有自己的高速缓存,处理变量时会拷贝一份主存中的变量到各自核心的高速缓存中。当各自核心处理任务时。将会导致各自的缓存数据不一致。为此,要制定一些协议,各个核心在读写时要根据协议进行 *** 作,来维护缓存的一致性
cpu乱序执行问题 cpu为了提高运算效率,会对代码进行乱序执行,然后对乱序执行的结果重组。这与代码顺序执行的结果是一样的。可是在一个核的计算任务依赖另一个核计的算任务的中间结果,那么处理器最终得出的结果和我们期望得到的结果可能会大不相同。
Java内存模型可以理解Java内存模型就是上述问题的抽象。多个cpu核心抽象成多个线程,主内存抽象成Java的主内存,cpu高速缓存抽象成Java线程的各自内存。 这样我们就好理解了。
主内存:Java内存模型规定了所有变量都存储在主内存( 每条线程都有自己的工作内存)
工作内存:每条线程都有自己的工作内存,又称本地内存,线程的工作内存中保存了该线程使用到的变量在主内存中的共享变量的副本拷贝。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)