00:00
接下来我们看一下内存管理这一块的内容啊,那么咱们大数据的一些计算框架,计算引擎,底层开发语言主要是什么呀?是不是一个Java对吧?啊,当然SPA是不是基于SC对吧?好那么或者不管Java也好,这些是不是有一些什么东西啊。JVM嘛,啊,那么JVM这些东西呢。对咱们来讲有什么好处啊?GM是干嘛是帮我们管理内存的呀,对不对,那么JVM里面是不是有一些呃堆啊站呢,还有一些什么垃圾回收器啊,是不是帮我们回收内存等等啊。所以呢,咱们这些所谓的Java是不是也叫他一个高级语言呢。为什么叫高级呀?是不是有些事咱们不用做呀,只要是自动的,你就是高级的对吧?那低级的叫什么?
01:03
是不是都是手动的呀,对吧,就像手动挡车跟自动挡的车对吧?啊,无人驾驶跟那个手动挡的车啊,那么低级,比如说C语言。四亿元有什么特点?内存的申请释放,申请多少是不是都由自己来写的呀,对吧,你什么都是自己来,它是偏底层一点的啊GM好了,那虽然给我们带来了很多的好处,但是咱们在大数据的场景下。咱们可能要存的数据是不是特别大呀,那么可能这个JJM是不是顶不住啊,甚至说他自己触发的一个。垃圾回收结果把咱们的数据给回收掉了,是不是也有可能啊,啊甚至是不是咱们有时候会碰到一些问题,叫什么OM对不对啊,说白了就是有一些问题,好那为什么呢?来几点啊,那么加粗的字段,哎,大家了解到这几点啊,首先第一个对象存储密度低。
02:09
什么例子呢?我们在存的时候,他存了几部分对象头实例数据,也就是说它真正的数据,还有一个对齐填充的部分,举个例子啊,咱们一个布尔类型的值。需要几个字节啊。啊哎,我说的是对象啊,说错了,咱们一个对象,然后它里面只有一个属性是布尔类型的,那么整体这个对象它需要占多少呢?16。自己。对象头占八字节。那真正的这个布尔属性是不只需要一个字节呀。还为了对齐,什么叫对齐啊,咱们里面是不是都是。二的N次方啊。对吧,再具体一点,我们是不是都是八的倍数啊。
03:01
对吧,好,那你看前面这个八加一是多少。八加一等于16啊,不会吧,是不是等于九啊,那这个空间是不是奇怪,然后它会把它填充到什么?16会把它填充到16,那这七个是不是。没只是为了对齐而对齐对吧,把它占用的占着茅坑不拉屎对吧,那这你看实际上咱们只需要什么数据啊。我们只需要拿到一个布尔信息的数据,对吧,我们是不是想着那我一个字节就够了,你那么费那个老劲干什么呢,对吧。那么这是一个问题对吧?那第二个问题,负GC,全GC,满GC会影响性能。这种是满G负GC是什么呢?就是你的使用率已经很高很高,这个时候会阻塞进行一次大的清理,就像你住在宿舍里,你平时偶尔扫扫地对吧?但是逢年过节的,或者隔了一两个月回来,你是不是要大扫除啊,这个就相当于大扫除啊,是不是很占用你的性能对吧?还有一个OM啊,这个我们会经常遇到的问题,如果存的太多,他顶不住了,也没CC掉啊,也没回收,那是不是就爆了OM,还有一个缓存未命中,那这个东西是啥呢?这个跟CPU计算的原理有关系啊。
04:36
呃,CPU是有一个叫缓存的东西,那么我们。存的时候,比如说呃,这边有很多个啊,很多个小格子啊,那我可能存两个东西,我可能在这存一个,在这存一个,那你去拿的时候,你是不是得挨个去翻啊,就像你平平常藏了私房钱对吧,在沙发底下藏了100,在床底下藏了100,在厕所马桶盖下面藏了100啊就是说你有十几个点,结果你只剩下300块钱了,你忘了放在哪里,是不是十几个点挨个找一遍。
05:08
我我的私房钱到底在哪里了,那这种是不是很费时间呢?对吧,但是如果你统一藏在一个地方,那比较连续的,比如说你统一都藏在呃,厕所里面,可能一个砖把它撬开,里面藏一点马桶,马桶盖藏一点,对吧,洗手盆下面藏一点,那你就算找,你是不是在只在厕所里找就行了,这效率是不是就高了呀,对吧?啊,就这个意思啊。他在找的时候,呃,可能会有一个空转的现象,对吧?呃,那么具体呢。我我找到了一张。然后下一章我不知道在哪。那就是未命中嘛,就像我刚才画的。有好几个地方,你在这两个地方藏了,诶你这个找到了,是不是接下来按顺序找下一个,结果下一个是空的,对吧,那这个就是未命中,未命中是不是要接着去找啊,对吧?啊,这是一个未命中问题啊,简单了解一下啊,那么flink并不是简简单单依赖于JVM自身的这些机制来做的,它有自己的。
06:15
管理啊,自己的管理啊。那么我们来了解一下重要的一个概念,内存模型。它自主的内存管理是什么样的呢?那么我们分两块来讲,一个是job manager,一块是task manager。那么job manager。主要看啥呢?哎,这个累啊,这个累,我给大家瞅一眼。你看我是在这截的图啊,这个截图它用到了这个比较简单啊,这个是什么。对,内存这个。对外内存啊,这个很简单啊,很简单,呃,那咱们这个不啰嗦,咱们重点在哪里啊啊,或者还有一点要给大家强调啊。
07:07
呃,我给大家打开一个啊。LINK12CONFIG,咱们看一下配置文件怎么体现啊?啊,语言要么好,我们往下瞅,还记得配置文件,是不是可以配置内存呢?诶,我按了一个什么。按了一个二是吧,不管往下往下。来。是不是job manager,然后呢,他叫的是process process。那么。这个包含了什么?堆内堆外内存还有。包含了JVM源空间还有其他开销,什么意思啊,你JVM本身运行是不是需要占占用一定的资源啊。
08:04
对吧,所以这里是。除了job manager自己用的,还包括了JVM占用的资源,是这个意思啊,这个意思。所以它叫process。好,这个是一个。Job manager。那么你像呃老版本的啊,为什么要给大家强调这个,这个就是咱们刚才看到的配置对吧?Process它也告诉我们包含JVM开销,那么在老版本里面一点。呃,在1.11的时候,张思雨我说的是job本manager1.1的时候,他才改成这个的,如果是以前他是怎么样。它配置的叫doing内存的大小啊,就是这个配置像有有些区别,好吧,这是job manager,注意版本号1.1。
09:00
嗯。那么前面这句话啥意思啊?Task manager是从1.10做了重大改变。大家注意,重大。就是说task manager先改job manager在1.11的时候跟着改成了这样啊,包含了GM本身好吧,这个是咱们做的一个了解啊。
我来说两句