您现在的位置是:主页 > Web前端技术 > Web前端技术

Java内存模型的知识点有哪些编程语言

IDCBT2022-01-07服务器技术人已围观

简介这篇文章主要介绍“Java内存模型的知识点有哪些”,在日常操作中,相信很多人在Java内存模型的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

这篇文章主要介绍“Java内存模型的知识点有哪些”,在日常操作中,相信很多人在Java内存模型的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java内存模型的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

关于 Java  内存模型,我们还是先从硬件内存模型入手。

硬件内存模型

先来看看硬件内存简单架构,如下图所示:

硬件内存结构

这是一幅简单的硬件内存结构图,真实的结构图要比这复杂很多,特别是在缓存层,现在的计算机中 CPU 缓存一般有三层,你也可以打开你的电脑看看,打开  任务资源管理器 ---> 性能 ---> cpu ,如下图所示:

 

CPU 缓存

从图中可以看出我这台机器的 CPU 有三级缓存,一级缓存 (L1) 、二级缓存(L2)、三级缓存(L3),一级缓存是最接近 CPU  的,三级缓存是最接近内存的,每一级缓存的数据都是下一级缓存的一部分。三级缓存架构如下图所示:

 

现在我们对硬件内存架构有了一定的了解,我们来弄明白一个问题,为什么需要在 CPU 和内存之间添加缓存?

关于这个问题我们就简单点说,我们知道 CPU 是高速的,而内存相对来说是低速的,这就会造成一个问题,不能充分的利用 CPU 高速的特点,因为 CPU  每次从内存里获取数据的话都需要等待,这样就浪费了 CPU 高速的性能,缓存的出现就是用来消除 CPU 与内存之间差距的。缓存的速度要大于内存小于 CPU  ,加入缓存之后,CPU 直接从缓存中读取数据,因为缓存还是比较快的,所以这样就充分利用了 CPU  高速的特性。但也不是每次都能从缓存中读取到数据,这个跟我们项目中使用的 redis 等缓存工具一样,也存在一个缓存命中率,在 CPU 中,先查找 L1  Cache,如果 L1 Cache 没有命中,就往 L2 Cache 里继续找,依此类推,最后没找到的话直接从内存中取,然后添加到缓存中。当然当 CPU  需要写数据到主存时,同样会先刷新寄存器中的数据到 CPU 缓存,然后再把数据刷新到主内存中。

也许你已经看出了这个框架的弊端,在单核时代只有一个处理器核心,读/写操作完全都是由单核完成,没什么问题;但是多核架构,一个核修改主存后,其他核心并不知道数据已经失效,继续傻傻的使用主存或者自己缓存层的数据,那么就会导致数据不一致的情况。关于这个问题  CPU 硬件厂商也提供了解决办法,叫做缓存一致性协议(MESI 协议),缓存一致性协议这东西我也不了解,我也说不清,所以就不在这里 BB  了,有兴趣的可以自行研究。

聊完了硬件内存架构,我们将焦点回到我们的主题 Java 内存模型上,下面就一起来聊一聊 Java 内存模型。

标签:

很赞哦! ()

本栏推荐