内存?java模型?jvm结构?一篇文章让你全部看懂!

Posted Linkey bpm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存?java模型?jvm结构?一篇文章让你全部看懂!相关的知识,希望对你有一定的参考价值。


计算机内存

相信每个人都有一台电脑,也有diy电脑的经历。现在一台功能强大的diy电脑大概3k就能组装起来,一个i5-8400 的cpu 869元,DDR4 内存 1200块钱,b360主板300元 散热器50元 机械硬盘200元 350w电源300元 机箱100元 ,没错,只要3k就能拿到一个性能强大的6C6T电脑。

要说一台PC中最重要的部件是什么?大家看价格也会看明白,是cpu和内存,下面我来介绍一下cpu和内存之间的关系。


cpu与内存缓存的千丝万缕

cpu相关术语

首先说明一下相关的cpu术语:

  • socket:cpu插在主板上那个槽与cpu称作一个socket。

  • Die:核心(Die)又称为内核,是cpu的物理组成部分之一。cpu也会分为多die cpu与单die cpu,譬如我们现在强大的AMD TR-2990WX就是4die cpu,每个die里面有8个核心(core)

  • core:也就是物理核心了。core这个词是英特尔起的,起初是为了与竞争对手AMD区别开,后面用的多了也淡了。

  • thread:就是硬件线程数。一个程序执行可能需要多个线程一起进行~而现在也就比较强大的超线程技术,过去的cpu往往一个cpu核心只支持一个线程,现在一些强大的cpu中,就譬如IBM 的POWER 9 ,支持8核心32个线程(平均一个核心4个线程),理论性能非常强大。

总结一下,以明星cpu AMD TR-2990WX作为栗子,这个cpu使用一个socket,一个socket里面有4个die,总共32个物理核心64个线程


cpu缓存

我们都知道,cpu将要处理的数据会放到内存中保存,可是,为什么会这样,将内存缓存硬盘行不行呢?

答案当然是不行的。cpu的处理速度很强大,内存的速度虽然非常快速但是根本跟不上cpu的步伐,所以,就出现的缓存。与来自DRAM家族的内存不同,缓存SRAM与内存最大的特点是,特别快,容量小,结构复杂,成本也高。

造成内存和缓存性能差异,主要有以下原因:

  1. DRAM储存一位数据只需要一个电容加上一个晶体管,而SRAM需要6个晶体管。由于DRAM保存数据其实是在电容里面的,电容需要充放电才能进行读写操作,这就导致其读写数据就有比较大的延迟问题。

  2. SRAM的频率和cpu频率比较接近;而DRAM的频率和cpu差距比较大。

近代的缓存通常被集成到cpu当中,为了适应性能与成本的需要,现实中的缓存往往使用金字塔型多级缓存架构。也就是当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。


下面是英特尔最近以来用的初代skylake架构



内存?java模型?jvm结构?一篇文章让你全部看懂!



可以看到,每个个核心有专属的L1,L2缓存,他们共享一个L3缓存。如果cpu如果要访问内存中的数据,必须要经过L1,L2,L3,LLC(或者L4)四层缓存。

缓存一致性问题

最开始的cpu,其实只是一个核心一个线程的,当时根本不需要考虑缓存一致性问题,单线程,也就是cpu核心的缓存只被一个线程访问。缓存独占,不会出现访问冲突等问题。

时代不断发展,**“多核CPU多线程”**来了,即多个线程访问进程中的某个共享内存,且这多个线程分别在不同的核心上执行,则每个核心都会在各自的caehe中保留一份共享内存的缓冲。由于多核是可以并行的,可能会出现多个线程同时写各自的缓存的情况,而各自的cache之间的数据就有可能不同。

这就是我们说的缓存一致性问题。


目前公认最好的解决方案是英特尔的MESI协议,下面我们着重介绍。


MESI协议

首先说说I/O操作的单位问题,大部分人都知道,在内存中操作I/O不是以字节为单位,而是以“块”为单位,这是为什么呢?

其实这是因为I/O操作的数据访问有空间连续性特征,即需要访问内存空间很多数据,但是I/O操作比较慢,读一个字节和读N个字节的时间基本相同。

机智的intel就规定了,cpu缓存中最小的存储单元是缓存行cache line,在x86的cpu中,一个cache line储存64字节,每一级的缓存都会被划分成许多组cache line


缓存工作原理请看

以上是关于内存?java模型?jvm结构?一篇文章让你全部看懂!的主要内容,如果未能解决你的问题,请参考以下文章

一篇文章带你看懂 JVM基本结构内存模型

JVM内存结构 VS Java内存模型 VS Java对象模型

从Java虚拟机规范看HotSpot虚拟机的内存结构和变迁

JVM内存结构Java内存模型和Java对象模型

基于JDK1.8的JVM 内存结构JVM篇三

不止面试02-JVM内存模型面试题详解