做 java 相关开发的,必须了解 JMM(java内存模型),(面试很喜欢问)。
一。 硬件内存模型
物理机硬件的内存模型:
冯诺依曼体系结构核心思想是:“存储程序,程序控制”,,那么硬件至少需要有两个东西,程序就是控制器即软件控制,
(1)内存 (存储)
(2)处理器(控制)
但是,普通存储器读写速度比较慢(此处指的是持久存储且能大量存储,目前硬盘属于,廉价通用的存储器)
为了协调CPU处理速度,和普通存储器读写速度比较慢,在处理器和主存之间加上了高速缓存。
高速缓存出要使用RAM
SRAM : 静态RAM,不用刷新,速度可以非常快,像CPU内部的cache,都是静态RAM,缺点是一个内存单元需要的晶体管数量多,因而价格昂贵,容量不大。
DRAM: 动态RAM,需要刷新,容量大。 (内存条)
SDRAM :同步动态RAM,需要刷新,速度较快,容量大。 (内存条)
以上便是有关硬件物理内存模型的介绍
二。java内存模型
为什么先介绍,物理内存模型,那是有原因的,java内存模型是对物理内存模型的一个抽象。
(1)主内存,相当于物理机的磁盘,用于存储大量数据。
(2)java线程,相当于物理机的cpu,用于处理数据
(3)工作内存,相当于物理机的高速缓存,线程私有,提高线程执行效率
三。注意事项
java内存模型只是抽象出来的,一种数据结构而已,,与物理内存的对应关系在实际运行中,主内存和工作内存可能都处于物理机的主存中。