CPU
中央处理器,是计算机的控制和运算核心,我们的程序最终都会变成指令让CPU去执行,处理程序中的数据;
内存
我们的程序都是在内存中的运行的,内存会保存程序运行时的数据,供CPU处理;
缓存
CPU的运算速度和内存的访问速度相差比较大,这就导致CPU每次操作内存都要消耗很多等待时间。内存的读写速度称为了计算机运行的瓶颈。于是就有了在CPU和主内存之间增加缓存的设计。靠近CPU的缓存称为 L1,然后依次是L2 ,L3和主内存,CPU缓存模型如图所示
CPU Cache分成三个级别:L1、L2、L3。级别越小越接近CPU,速度也更快,同时也代表着容量越小;
L1是最接近CPU的,它容量最小。例如32K,速度更快,每个核上都有一个L1 Cache;
L2Cache更大一些,例如256K,速度要慢一些吗,一般情况下每个和上都有一个独立的L2 Cache;
L3 Cache是三级缓存中最大的一级,例如12MB,同时也是缓存中最慢的一级,在同一个CPU插槽之间的核共享一个 L3 Cache;
Cache的出现是为了解决CPU直接访问内存效率低下的问题,程序在运行的过程中,CPU接收到指令后,他会最先向 CPU 中的一级缓存(L1 Cache)去寻找相关数据,如果命中,CPU进行计算时就可以直接对CPU Cache中的数据进行读取和写入,当运算结束之后,再将CPUCache中的最新数据刷新到内存中,CPU通过直接访问Cache的方式替代直接访问主存的方式,极大的提高了CPU的吞吐能力。但是由于一级缓存(L1 Cache)容量较小,所以不可能每次都命中。这时CPU会继续向下一级二级缓存(L2 Cache)寻找,同样的道理,当所需要的数据在二级缓存中没有的话,会继续向L3 Cache、内(主存)和硬盘;
小结
计算机的主要组成 CPU、内存、输入设备、输出设备;
Java 内存模型
概念:
Java内存模型(Java Memory Mode --- JMM),千万不要和 Java内存结构混淆了;
Java内存模型,是Java虚拟机规范中所定义的一种内存模型,Java内存模型是标准化的,评比栏底层不同计算机的区别;
Java内存模型是一套规范,描述了 Java 程序中各变量(线程工共享变量)的访问规则,以及在 JVM 中将变量存储到内存和从内存中读取变量这样的底层细节,具体如下:
主内存:主内存是所有线程都共享的,都能访问的。所有的共享变量都存储于主内存;
工作内存:每一个线程都有自己的工作内存,工作内存只存储该线程对共享变量的副本。线程对变量的多有操作(读、取)都必须在工作内存中完成,而不能直接读写主内存中的变量,不同的线程之间也不能直接访问对方工作内存中的变量;
Java 内存模型的作用
Java内存模型是一套在多线程读写共享数据时,对共享数据的可见性、有序性、和原子性的规则和保障;(synchronized、volatile)
CPU缓存、内存与Java内存模型的关系
通过对前面的CPU硬件内存架构、Java内存模型以及Java多线程的实现原理的理解,我们应该以及意识到,多线程的执行最终都会映射到硬件处理器上进行执行;
但Java内存模型和硬件内存架构并不完全一致。对于硬件内存来说只有寄存器、缓存内存、主内存的概念,并没有工作内存和主内存之分,也就是说Java内存模型对内存的划分,对硬件内存的划分并没有任何影响,因为 JMM 只是一种抽象的概念,是一组规则,不管是工作内存的数据还是主内存的数据,对于计算机硬件来说都会存储在计算机主内存中,当然也有可能存储到CPU缓存或者寄存器中,因此总体来说,Java内存模型和计算机硬件内存架构是一个相互交叉的关系,是一种抽象概念划分与真实物理硬件的交叉;
小结:
Java内存模型是一套规范,描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节,Java内存模型是对共享数据的可见性、有序性、和原子性的规则和保障;
原文:https://www.cnblogs.com/lililixuefei/p/13186052.html