随着CPU和内存的发展速度差异的问题,导致CPU的速度远快于内存,
所以现在的CPU加入了高速缓存,高速缓存一般可以分为L1、L2、L3三级缓存。
这导致了缓存一致性的问题,所以加入了缓存一致性协议,同时导致了内存可见性的问题,
而编译器和CPU的重排序导致了原子性和有序性的问题,JMM内存模型正是对多线程操作下的一系列规范约束。
Java虚拟机规范书中说到曾试图定义一种Java内存模型来屏蔽各种硬件和操作系统的内存访问差异,
以实现让Java程序在各种平台下都能达到一致的内存访问效果。
主要目的是定义程序中各种变量的访问规则。保证在高效并发的时候程序能够正确执行。
即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节。
JMM是JVM的一种规范,JMM规定了JVM必须遵循一组最小的保证,
这组保证规定了对变量的写入操作在何时将对于其他线程可见。
所以JVM定义了若干种程序运行期间会使用到的运行时数据区,有些区域随着JVM启动及销毁。
另外一些区域是与线程一一对应的,随着线程创建和销毁。
领取专属 10元无门槛券
私享最新 技术干货