00:00
接着啊,咱们来看一下这个关于垃圾回收器方面的第三个变化,叫做这个ZJC,刚才呢,咱们也到了对吧?那么关于垃圾回收器呢,咱们在JDK14当中一共提到了三个变化,这三个变化的话呢,大家如果去面试的时候呢,聊到这个GM呢,那很自然而然的都会聊到这个GC,那很自然而然的,大家都要把这个JDK师资当中这三个变化呢,要抛出来,那么一定是可以作为你面试加分项的这个谈资的。OK,那这个新特性呢,主要其实是两个啊,提到了就是ZJC呢,在Mac操作系统上和Windows操作系统上的一个应用,那这个呢,咱们等下再说,先来谈谈这个ZJC,你怎么去理解,怎么去看待这个ZJC,对吧,我们把这个高度呢,先给它拉起来,说呢,ZJC我这用了个词叫做令人震惊的革命性的ZJC。刚才呢,我们在讲这个叫圣豆啊,这个时候呢提到过说呢圣内豆啊呢,跟这个ZGC都是主打呢,叫低停顿。这呢也是咱们未来的两款这个垃圾回收器啊,未来的两款主打的这个垃圾回收器,说他俩的这个目标啊,是高度相似的,在尽可能对吞吐量影响不大的前提下呢,实现在任一堆内存大导线。
01:07
这个所谓的任意堆内存呢,是可以达到叫TP级别的堆内存的。那然后然后呢,我们能够把这个停顿时间啊,控制在十毫秒以内。所以这个呢是非常厉害的。那么关于这个垃圾回收器,怎么去衡量一款垃圾回收器是比较优秀的呢?你是不是也应该有一些参照的指标呢?就好比是咱们通常所说一个算法,算法的话呢,我们会从两个角度,一个呢叫做时间复杂度,是不是一,另外一个呢,我们称为叫这个空间复杂度,对吧?从这两个角度呢,我们去衡量一个算法的优劣,那么对于这个垃圾回收器来讲呢,我们从两个方面来衡量,一个呢,叫做吞吐量。单位时间之内呢,吞吐量是不是越大越好,那另外一个呢,我们叫做停顿时间,在停顿时间方面呢,我们追求呢,叫做低延迟。低延迟就是你停顿时间呢,越少越好,对吧,因为我们呢,你要是进行垃圾回收的时候呢,是不是用户现场要稍微停一停啊,这叫停顿时间,OK,那这里边儿非常牛的提出来了,说它二者呢,都能够把这个呃,TB级别的堆应内存的大小的情况下呢,把垃圾回收的停顿时间呢,控制在十毫秒以内,所以呢,是非常了不起的。
02:11
那这个虽然说这个深豆呢,它也达到了这样的一个性能,但是呢,是不是肯定ZJC呢,是不是官方推荐的叫根正描红是吧?而深豆的话呢,是这个第三方的,所以说呢,是不是肯定会受排挤,那么未来的话呢,大家就不要去研究这个了,那单词还很难写是吧?大家呢,就主要关注CGC就可以了。那么在这个深入理解Java虚拟这本书当中,对这个ZCCC呢,是这样来定义的啊,说ZJC呢是一款基于叫region内存布局的,大家会看到这个基于region的去分带,这是一个主流,这一呢这first是不是也这样啊,说暂时呢不设分带,包括呢,你说这个新生代老年代啊,这块咱们都不分了啊说使用了叫毒屏障染色指针和内存的多重映射等技术来实现可并发的垃圾,呃,这个标记压缩算法。这个呢,我们也可以称为呢,叫标记整理算法。
03:00
这里边提到叫毒屏照和这个染色指针和多重这个映射,大家呢,可以去百度中去查一查,这个我们这块呢,就不过多的去讲解了,或者说呢,大家去哔哩哔哩上来看我讲的那条视频,后边呢都会提到这样的问题,OK。那么我们CDC跟圣豆呢,都提到它是以低延迟为首要目标的,这也是咱们这个目前衡量一款垃圾回收剂,它这个优劣的一个最重要的一个指标,也是咱们目前呢,是最关注的尽量的这个降低这个延迟时间。或者叫暂停时间,对吧。好,那么下边呢,我们来看一下这个ZJC,你这块呢,提到这样的一个情况呢,那咱们直接上数据呗,对吧,大家看这个图啊,这个图当中呢,有两套这个指标,嗯,先看咱这个深色的这个呢,是以叫以低延迟为首要目标的一个吞吐量。以DH为手动目标的这个吞吐量的一个情况,这块呢,我们不得不提出这个ZJC它的一个这个弱项哈,咱们刚才说了,是不是吞吐量跟那个停顿时间是衡量这些的两个重要指标,对吧?这个ZJC的优点呢,是这个停顿时间就是它控制的比较好啊,叫低延迟,它的这个稍微弱项,这个是它的强项。
04:05
这个强项呢,是这个停顿时间这块呢控制的比较好,它的弱项呢是这个吞吐量。那我们这块来看一下啊,如果呢,你是以这个低延迟为首要目标的,这个吞吐量方面,这个深色的我们会发现呢,ZJC比这个G1呢要强。要强一些,但是呢,这个相较于我们这个powerline呢,是稍微要差一点,咱们CMS呢不是不用了嘛,所以这块咱们主要呢,拿这个powerline呢去衡量。但是呢,也已经能够达到它的99%了,你看非常接近是吧。OK,这是这个情况,然后呢,这个呢叫呃吞吐量,这个时候呢,我们可以理解成呢,是面向比如说服务器端啊应用的情况下,我们可以设置一个停顿时间,比如说呢,是这个在十秒跟100秒这个停顿时间允许的范围之内,这个ZJC,大家会发现它的性能呢,是不是超过了这个power和这个g first呀。还是很明显的一个超越对吧,这呢主要我们是提到呢,涉及到过这个吞吐量的一个问题啊,那么我们下边来看它的这个优势啊,那这个优势呢,显然一看大家呢,是不是觉得非常明显啊。
05:06
没问题是吧,那么在这个停顿时间这个测试当中呢,我们会发现呢,这个JC毫不留情的把他俩是不是甩出这种。应该都说两个数量级了吧,大家先别看这个图哈,甩出两个数量级不管呢,是从这个叫平均停顿时间,95%的停顿时间,99%,99.91呢,我们说这个最大停顿时间来比这个ZGC都毫不留情的把这个数据呢,或者这个时间控制在了一个十毫秒以内,这是你基本上都看不到了啊,这就是十毫秒以内的意思。来看这吧,这个图呢,是咱们你看这块是一个纯线性的一个数值,这块呢是非线性的啊非线性的话呢,你看这个十毫米以内是不是都没有超过呀,所以说呢,这个ZJC的性能大家呢,是不是可见一斑。OK。那么很遗憾的是什么呀?这个ZJC目前呢,还处于这个叫实验状态,它还不是一个标识为一个正式版本,这个还没有完成它的所有特性,所以说我们把它称为叫来自于未来的叫垃圾回收器,是吧?嗯,那么我们用这个令人震惊和革命性来形容呢,并不过分,未来呢,在服务器端大内存低延迟的这个场景当中,一定是首选的垃圾回收器,也就是说我们这个G是不是还能活几年啊?
06:13
这个几年也不一定是吧,几个版本,那么后续的话呢,这个g first呢,肯定也会被替换掉啊,但这个g first的一个好处呢,它也是基于这个region,这也是现在的一个主流,对吧。嗯,OK。如果大家呢,后期想学习的话呢,你可以买这本书。啊叫ZJC设计与实现,这个在京东上你一搜都能搜到对吧?行,这个就过了啊,那回到咱们这个新特性来说,这个ZJC啊,大家刚才已经领略了它的一个优良性能了,但是很遗憾呢,在JC14之前呢,它只能够使用在这个Linux上。那如果想在Windows上呢,和max系统上,桌面及应用中,想从这个ZD当中进行受益的话呢,就得用这个JDK14这个版本了。在14类版本当中,它支持的Mac和Windows。OK,那如果想用的话呢,大家就把这个参数啊,CTRLC一下,这个咱们粘过来是吧,粘过来的话呢,我就先咱们先跑一下啊,直接在这块。
07:05
把它呢,CTRLV一下好,我们这块呢,OK。这块跑一下,使用咱们这个CGC啊。嗯,这块呢,说标识我这块有问题,这个参数写的不对是吧。嗯,那我们来看一下。顺便咱们说一下这个使用的话呢,这个未锁定的这个VM的这个行为,就是这块呢,就提到我们这个试验性的。这个就是解锁呗,解锁这个实验性的这个呃,虚拟拟的这个参数行为,咱们因为ZJ呢属于这个实验性的,所以这块要解锁,就是保证我们能使用,然后后边呢,就是我们使用这个ZJC这块呢,这个空格应该是有问题的啊,大家改一下。好,我OK一下再执行。好这块就可以了是吧,但是这块呢,貌似也没有正常执行成功啊,说这个ZJC要求咱们这个Windows系统也得有个版本号,就是他对咱这个Windows啊也有要求,那应该我这块呢,可能是不满足这个,大家呢注意一下就行,因为我这是WIN7了,WIN7的这个Windows好像这个微软都已经停止更新了是吧,那那大家呢,你回头你用WIN10啊,应该是都OK了。
08:09
行这块呢,就咱们提到这个叫ZJC这个情况啊,我把这个事儿呢,也给他CTR一下。嗯,咱们在这块呢,标识一下,这呢是咱们关于垃圾回收器的三个变化。三就是ZJC。它呢,可以在咱们说这个叫Mac OS和咱们Windows上去使用。OK,这呢,就是我们这个情况,然后咱把这个参数呢,咱也放到这吧。保存一下好,这呢,就咱们说的这个ZGC这个情况。
我来说两句