Java内存模型的由来:这和cpu和内存技术发展有关,当代cpu运算速度太快,以至于被内存拉低了程序运行的整体效率
应对措施:为了不被内存影响性能,cpu厂商给cpu加了一级二级甚至三级高速缓存,cpu读取数据时先从一级缓存中找,没有的话找二级,再没有就找三级或者主存;java内存模型规定了变量都是存储在主存中,程序运行时操作的是高速缓存中的数据,操作完之后再同步到主存;
后遗症及规范:在cpu和主存之间增加了一个高速缓存固然提升了程序运行效率,但是在多线程并发操作同一个变量时,就可能造成数据不一致的问题,所以就有了JMM(java内存模型,也可叫JMM规范),它保证了并发编程中数据的正确性(正确性可细分为原子性、可见性、有序性),底层具体实现方式比较复杂,好在JMM为我们日常编程提供了一些用于保证数据正确性的关键字,如synchronized(原子性、有序性)、volatile(可见性、有序性);