Java 内存模型

Issue: 

    每条指令都是在cpu中执行,数据存放在主内存中

    但是cpu执行速度越来越快,内存的读写速度跟不上cpu的速度

Solution:

    在cpu和主存之间加高速缓存(速度快,内存小,昂贵)

缓存: 一级缓存, 二级缓存,三级缓存。查找时逐级递增


访问缓存问题:

    **单核cpu, 多线程**  多个线程同时访问进程中的共享数据。任何时刻都只能有一个线程在执行,因此不会出现缓存访问冲突。    

    **多核cpu, 多线程** 由于多核是可以并行的,可能会出现多个线程同时写各自的缓存的情况,可能会出现缓存数据不同的情况。


为了解决原子性,可见性,有序性问题,所以出现了内存模型。

内存模型定义了共享内存系统中多线程程序读写操作行为的规范

    1. 所有的变量都存储在主内存中

    2. 每条线程有自己的工作内存

    3. 线程的工作内存中保存了该线程中是用到的变量的主内存福本拷贝

    4. 线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存

    5. 不同线程之间无法直接访问对方工作内存中的变量

JMM作用于工作内存和主存之间的数据同步过程。规定了数据如何同步以及什么时候做数据同步

你可能感兴趣的:(Java 内存模型)