Java内存模型(JMM) ----多线程/并发编程

在介绍 Java 内存模型之前,先来看一下到底什么是计算机内存模型。

计算机结构简介

冯诺依曼,提出计算机由五大组成部分,输入设备,输出设备存储器,控制器,运算器Java内存模型(JMM) ----多线程/并发编程_第1张图片

CPU

中央处理器,是计算机的控制和运算的核心,我们的程序最终都会变成指令让CPU去执行,处理程序中的数据。
Java内存模型(JMM) ----多线程/并发编程_第2张图片

内存

我们的程序都是在内存中运行的,内存会保存程序运行时的数据,供CPU处理。

Java内存模型(JMM) ----多线程/并发编程_第3张图片

缓存

CPU的运算速度和内存的访问速度相差比较大。这就导致CPU每次操作内存都要耗费很多等待时间。内存的读写速度成为了计算机运行的瓶颈。于是就有了在CPU和主内存之间增加缓存的设计。最靠近CPU的缓存称为L1,然后依次是 L2L3和主内存,CPU缓存模型如图下图所示。
Java内存模型(JMM) ----多线程/并发编程_第4张图片
CPU Cache分成了三个级别: L1 L2 L3。级别越小越接近CPU,速度也更快,同时也代表着容量越小。
1. L1是最接近CPU的,它容量最小,例如32K,速度最快,每个核上都有一个L1 Cache
2. L2 Cache 更大一些,例如256K,速度要慢一些,一般情况下每个核上都有一个独立的L2 Cache
3. L3 Cache是三级缓存中最大的一级,例如12MB,同时也是缓存中最慢的一级,在同一个CPU插槽之间的核共享一个L3 Cache
Java内存模型(JMM) ----多线程/并发编程_第5张图片
Cache的出现是为了解决CPU直接访问内存效率低下问题的,程序在运行的过程中,CPU接收到指令后,它会最先向CPU中的一级缓存(L1 Cache)去寻找相关的数据,如果命中缓存,CPU进行计算时就可以直接对CPU Cache中的数据进行读取和写人,当运算结束之后,再将CPUCache中的最新数据刷新到主内存当中,CPU通过直接访问Cache的方式替代直接访问主存的方式极大地提高了CPU 的吞吐能力。但是由于一级缓存(L1 Cache)容量较小,所以不可能每次都命中。这时CPU会继续向下一级的二级缓存(L2 Cache)寻找,同样的道理,当所需要的数据在二级缓存中也没有的话,会继续转向L3Cache、内存(主存)和硬盘。

小结

计算机的主要组成CPU,内存,输入设备,输出设备。

你可能感兴趣的:(多线程,java,开发语言)