00:00
兄弟们,来不来?接下来我们介绍我们最重要的一个GC垃圾收集器c Mo,俗称并发标记清除垃圾收集器,那么也就是我们这儿的这个再次强调用在哪个区。养老区这个收收集期非常重要,那么呢,详细的给大家说说,它的步骤比较啰嗦。好,那么首先我们呢,来看一下什么叫并发标记清楚,首先同学们。在我们的这个复制算法后面,我们是不是讲过标题清楚好处是什么,节约空间,坏处是什么,产生内存碎片,还记不记得,那么这块如果实在忘了的同学,杨哥再带着你复习一次啊,那么这个事呢,我们说过了。在这种情况下,我们的什么标记清楚几步两步先标记出要什么回收的对象,然后再统一回收这些对象是不是叫垃圾收集算法的,其中有一种标记清除啊,那么好,这种标记清除这种算法有一种落地的产品实现,叫CMOS并发标记清除垃圾回收器。
01:14
那么,言下之见,好处是什么?节约?内存的空间端端端,但是敲掉以后,你看是不是就像一口牙一样留下了一些内存碎片啊,那么好,同学们,我们来看看。那么什么叫。并发标记清除的垃圾收集器。那么弟兄们走。那么c Mo收集器叫并发标清除,是一种获得以最短回收停顿时间为目的的收集器,非常适合用在互联网站或者BS服务系统上。那么。非常重视服务器的什么速度啊,响应速度,希望系统的停顿时间最短,明确的说了,现在外面如果你是互联网公司,一般做GVM底层优化的话,以JAVA8为例,就应该把它配成是吗?Cmos收集器,那么CMOS非常适合多内存大,那不用讲,那现在硬件老便宜了,你们现在是不是机器上都是16G内存了?
02:07
那么CPU核数多,哎呀,八核举少,你们看吧。对对对,举手举手怎么着,你们班是不是2/3的都是八核了,那么好,也是即一收技术形成的大型用的什么首选服务器,那么不用讲,弟兄们你看。它呢是属于什么CM并发标记清除,那么大家请看,那么干嘛呢?应用程序,然后它分什么几个阶段,1234,那么大家看。在这块实际而言,它分你看初始标记,待会我们会讲它这有四个步骤哈,实际而言它在一三这两个阶段还是会停顿一下,它非常少,但是在二四这两个阶段有没有发现是可以同时交替的跟应用程序执行的,那么这样它的GC不但可以。更快的回收,而且是不是可以不用暂停或者更少的暂停我们的应用程序?好,那么并发标记清楚。
03:07
主要它的优势是并发收集算法停顿比较低,并发指的是与用户线程一起执行好。那么兄弟们。我们请看怎么开启呢?使用这么一个参数,那么开启后自动的会将这个打开,言下之意什么概念?也就是说兄弟你只要在老年代开启了Mo。并发标记清除垃圾,收集器自动的会给你关联一样去用排六这种收集器已达到。和谐配合完美的最佳性能状态,那么这个时候如果你开启该参数以后,样区用排6OLD的区用Mo加SOLD的收集器,哇,诶不对啊,杨哥,你这个你不是说是用开启这个以后新生代用排六,老年代用c Mo嘛,注意别忘了下面这儿还有一条线呐。
04:08
啥意思?如果那么出现了不太理想的异常情况,我们将会把什么SOLD将作为Mo容器?出错以后的什么东东?后背收集器?这个是关键。正常情况下你。如果是你是什么并发收集要求停顿时间,第一要用这个,像大型的互联网都是用这个啊,如果用M收集的话,一样需你用的是尿。样区并发。样区病情收集器,然后呢,这块用并发标记清除,但是如果你在O区并发标记清除有时候失败了呢,马上有个填开的,有个后背叫SOLD。OK,那么这个时候呢,我们再来看它的开启,很简单哈,用这个参数就能开启,那么基本上其实哈,正常情况下只需要记这条线就行了,PAR6加Mo,好,那么兄弟们。
05:07
接下来我们就要看看什么东东呢?一。三四毛意思啊,他这有什么四步,那么这个四步的过程,我们来来老爷。第一个叫。Mark俗称什么初始标记?Mark,这个是不是叫初始标记?回答我,停不停?甜不甜?行的啊,那么这事的话注意。只是标记一下GC root能关联到的对象就检查一下,好,开始要收集了,我们打一些是不是要标记清楚,算法暂停速度很快啊。第二部叫什么?并发标记和用户线程是一起的,第二步停不停,这个是不是叫con current mark干嘛?是不是既有用户线程又有GC线程干嘛?第二步停不停叫并发标记,这个步骤注意。
06:04
进行GC root的跟踪过程和用户线程一起,也就是说我上一步从GC root开始盘点了一下,那么开始继续探索和跟踪,一句话。有点类似于。客人。你要吃饭,我要打扫卫生,我不让你停顿,你吃你的饭,但是我现在不扫地,地上没有灰尘,我先把旁边的窗户擦一下,那么注意不要暂停工作线程,顾客可以继续吃饭,我去擦窗子,我们和用户一块工作。主要是标记过程,标记全部对象,那么第三步,那么大家请看。填不填,你看remark什么叫re,什么意思,不是标了一次嘛,这个叫初始mark,咱们在又来自remark,因为在这个过程当中,可能有些对象又不需要收集了,它有一个二次确认的过程,好,那么这时候干嘛呢?修正在并发标记初期,因用户程序继续继续运行而导致标记变动,那小部分对象的标记记录,就比方说以前干嘛呢,这些是要收的,但是第二次来检查发现,哦,不行,这个对象现在又被重新利用起来了,不能收,有个二次确认的过程,好,那么这个时候。
07:17
暂停好,那么这个时候由于并发标记的时候,用户依然在程序运行,那么也就是正式清理前,我们要做一次修正,好,那么这个就是什么重新标记,然后呢。开始了mouse,真真正正前三步完成干嘛?并发清除和用户线程一起,那么请大家看标记的时候我要停,但是干嘛这个时候我是可以是吗?跟用户线程一块的OK,那么第四步并不停。那么大家请看清除了GC不可逃的对象和用户线程干嘛一块工作不需要暂停,能不能完活?所以说由于耗时最长的并发标记和并发清除过程中。
08:01
垃圾收集器线程可以和用户现在干嘛一起并发工作,也就是说他把这个步骤细分了。一三给我停,二四你不用停,可以跟用户线程一块儿一起干,那么言下之意是不是比前面的那个要么停要么干要好一点,起码它优化了以后,有些可以并发运行,那么所以说总体上来看,CM数据器的内存回收和用户线程是一起并发执行的,它的性能好就好在这儿,那么所以说同学们,我们呢?把理论知识再巩固一下,共计四步,这四步非常重要啊,初始标记,并发标记,二次确认的什么?Remark重新标记,然后才能使并发清楚么?四步分别如下,那么来,待会儿我们会去看代码,那么来,同学们。123413停,二四并发,那么这个时候来兄弟们,第一种貌算法的粗略就是什么?
09:03
停初始标记,然后干嘛?并发,然后呢重新标记,然后呢并发清除,你看c Mo嘛是吧。标记清楚,那么大家请看,待会儿我会给大家演示收集的情况,四步,初始标记,并发标记,Final remark是不是我们这儿的重新标记,然后是什么?它所以start,然后最后变法标记清楚,OK,那么它呢,主要是这四步,那么来说穿了就是12342和四,允许跟GC跟应用程序一块干,那么这个时候性能上大大提高,那所以说。它的优点和缺点,我们都来再继续说一下。那么当然哈,现在互联网公司大型的应用基本上会配CM非常好,那么来优点是什么?并发收集停顿低,因为大型的互联网程序都是跟用户交互比较频繁的,你淘宝上你下个单。
10:04
十分钟以后,他给你反馈什么订单成功了,这种交货你要让顾客在手机上等这个十分钟,估计你就半年了,所以说是什么并发收集停顿低,他的优点,那么缺点是什么呀。并发执行对CPU的压力比较大,那么什么概念呢?由于是并发的,这个时候M在收集,那么言下之意就是什么?你C不需要,以前你要么干活要么GC,你现在是干活和GC一块,那么这个时候是不是会增加我的负担?听懂了吗?也就是说cmos必须要在老年代堆内存用尽之前完成垃圾回收,否则cmo就会失败。那么言下之意为什么会?你注意这句话,关键哈,M。来,我把它标红。必须要在老年代堆内存耗尽之前就要完成垃圾回收,否则回收失败,那么我们讲过了,如果cmos回收失败了,这种垃圾收集器收集失败了,保底的是哪一个,这一个,所以说他整了个备份。
11:04
哎,间断性又进一步的得到了加强。那么创新老年代将会以这样的方式进行一次GC,从而会造成一次较大的停顿,哥们,你搞不定,我搞我倒是能搞定,但是CO我们说的创新干嘛是不是要全面暂停?因为你现在一个缺点就是干嘛M倒是确实好,但是干嘛就是一边收集一边干活。打扫卫生和顾客用餐都在干,那么这时候你跟我讲,CPU的压力是不是非常大?那么第二个讲过了,采用标记清除算法会导致什么大量碎片撑死,你是不是还是一个标记清除,只要标记清除,那么就会产生碎片,所以说呢,这块它的缺点呢,干嘛呢,就是。标记清楚是无法整理空间碎片的,那么老年代会随着应用的时长被耗尽,那以后的话呢,那么要不得不通过担保机制啊,对堆内存进行压缩,也就说要进行垃圾收集,那么干我当然我们这儿可以配这么一个参数,干嘛来指定多少次CMS收集之后进行一次压缩的负GCOK,那么所以说它的缺点就是这么。
12:14
一个CPU压力大,然后还是会产生碎片,好,那么同学们,那么接下来我们就来看看给我拍一下试试那么激动人心的时刻。第五种CM垃圾回收如果你是做微服务架构的生产服务器,那么你Java运行的时候可以把这种参数干嘛拍上去,好吧,把某个微服务OK。呃,那么这个时候来,同学们。开高,那么大家请看一眼,我现在用的已经是什么呢?C mouse并发标志清除了,那么好,同学们,我们下面开始来看看我们的一运行,以后同学们请看。那么现在我们这个。这个你看我们是不是只配了一个参数,但是它关联出来的是不是两个垃圾收集器,我们先不看中间这些我们先看,最后大家请看堆内存,我们知道由样区,Old区构成me space,对吧?我们可以看到样区用的是PAR new generation,那么old区是不是用的是c Mo,然后这是云空间。那么好回到我们刚才这。
13:23
初始标记并发标记。同星标记并发。清楚,那么这个时候来同学们找找找找找找,那么这个时候排尿,那么GC的时候是这些,然后完了以后请看。GC杠不住了,慢慢的。要变成你看帽了,那么这时候干嘛呢?来初始标记,然后大家看并发标记,没错吧,然后呢,我们再找找有没有找到啊同学们好,那么在这干嘛?我们再找一个什么呢?呃,Final标记哈,我们找一下这个时候有没有我们的final,好并发标记开始啊,在这你看finalmark干嘛,是不是我们的最后的一个确认标记了,然后干嘛。
14:12
清除start,那么OK,这个动作就是我们在这同学们要明白,我们最终实现的是排六加这一个,说穿了就是完成了什么。这条线我们。相关的并发收集的情况,那么这块找不好找,所以我当时找的时候也是特别麻烦,所以说呢,杨哥呢,故意给他先找好了,给大家粘过来,那么在这这次的运行效果就比较明显,因为它参数不一样,还那些呃,设置机C的大小,那么所以说这块对应着初始标记,并发标记重新标记清楚,那么。初始并发,最后清楚12344个步骤,那么这个是以前的实验效果,那么刚才呢,我们稍微呢,费了点功夫,也给大家呢找了一下,那么OK,这个就是我们的什么并发标记清除收集器。
我来说两句