00:00
那接下来的话呢,咱们带着来呢,介绍一下这个ZJC,这个ZJC话呢,这块我用了一个词儿,叫做令人震惊的革命性的ZJC啊,大家呢,可能看到说你这呢,是不是有点浮夸了呀,那我们讲完这个ZGC的时候呢,你再来看一看我这两个词呢,说的呢是不是过分啊,那首先的话呢,关于这个Z这C啊,在官方呢,有一个链接地址,这个链接地址的话呢,我刚才已经打开了啊,因为我这个呢,开的稍微慢一点啊,就提前开了在这个官方文档当中啊,关于我们这里边这个垃圾回收器啊,实际上呢,都有介绍啊,大家呢,也可以根据我们这个,我这留的这样的一个地址呢,你可以呢去查看一下啊,可以查看一下,你要觉得读的不方便的话呢,际上这块也可以,这个我们做一个这个翻译其实也行是吧,哎翻译成中文看。啊,只是一个建议啊,然后呢,在我们这个后边的话呢,你看这块提到叫Z啊,Garbage collector这个不知道这个是不是它起名的时候呢,就是想说明这是咱们最后一个垃圾回收器了,不知道是有是不是有这样的一个含义在这块哈,呃,就起名叫ZDC了。
01:02
诶,那么打开以后呢,这块关于我们这个ZJC这块呢,也有它相关的一些说明啊,如何去使用啊这样子的,那虽然说呢,这块已经把这个ZJC呢列入进来了,但是呢,要注意的就是现在这个ZJC呢,它仍然处于一个叫实验性的阶段。啊,实验性的阶段在我们JTK14当中是吧,最近的这个JTK排当中,它仍然还是一个实验性的一个阶段啊哎,这个大家稍微注意一下行,那下边呢,我们关于这个JJC啊,咱们做一个介绍,这个ZJC呢,和这个深态豆这个JC啊,他们这个目标啊是高度一致的,哎,都是呢,尽可能的对这个吞吐量啊影响不大的前提下呢,实现对任意的这个对内存的大小的情况下,都可以把这个垃圾回收啊控制在这个呃,十毫米啊,这个垃圾回收的这个停顿时间啊,控制在这个十毫秒以内。咱们这个神圳豆va这些呢,刚才提到过,也是这样的一个目标,对吧,当然这块呢,还得跟你具体的这个业务场景呢,和这个负载呢相关啊相关,然后呢,在这个深入理解障碍逊尼这本书当中,关于这个ZJC啊,是这样子来定义的。
02:04
啊说ZJC,呃,垃圾收集器呢,是一款基于region的内存布局,所以呢,我们会看到呢,Region呢,也是咱们新的这个垃圾回收器呢,它的一个主流的一个思考的一个方向啊,都是基于这个region的,我们能够把它控制在什么指定这个停顿时间的这个范围内,对吧,因为我们每次回收的时候,已经不再完整的去回收这个新这个这个老年代了,哎,只是回收其中的一部分是吧?哎,我们挑着那个权重比较大的那个region呢去回收啊。嗯,暂时呢就不设这个分带了,使用了叫毒屏障染色指针,内存多重映射啊等技术实现呢,叫可并发的,哎标记压缩算法,那我们知道标记压缩算法呢,需要对内存呢,是不是进行一个整理对吧?啊这呢也是一个可以并发呢去执行的,哎只要一并发的话呢,我们就诶就是没有这个stop word这个场景了,对吧?诶以de呢为首要目标的一款垃圾回收器。
03:00
啊,这个定义呢,应该算是非常的精准的,这里边呢,涉及到这个毒屏障染色指针和内存多重映射,哎,我就不在这块呢详细的展开来说了,大家有兴趣的话呢,可以看一下这个深入理解Java虚拟机,对于这几个概念呢,也都进行过介绍啊,都进过介绍行,那么关于这个Z这些它的一个工作过程啊,这块呢,是分成了这四个阶段啊,这四个阶段我们呢,诶这块呢,就不展开呢来进行一个说明了啊,它目前呢,还是一个实验性的一个状态,对吧?那么在这里边呢,大家你会发现呢,这个标记也好,还是这个重配也好啊,预备这个重分配也好,哎,你看这块是不是都提到了一叫并发的一个事情啊。啊,一并发的话呢,我们这个就没有stop the word了啊,就不谈这个停顿时间了,是吧,那这个停顿时间主要花在哪了呢?诶这块提到了叫初始标记,我们还是叫stop the world。咱们前面讲这个CMS也好,讲这个j first也好,初始标记的时候呢,咱们都是需要呢,把跟这个GC roots是不是直接关联的那些对象呢,给它选出来,对吧?诶这个时间的话呢,其实是非常短的啊,非常短的,那么对于这个ZJC来讲呢,它这个花时间就花在这块了。
04:11
哎,就画在这块了,所以说你跟这个对空间大小有没有影响呢?哎,多少可能有点影响,但是呢,影响不大对吧?哎,影响不大啊行,这呢就是我们说的这个ZJC它的一个基本情况,然后下边的话呢,咱们直接来上这个数据说虽然现在咱们这个ZC下它还处于这个叫实验的这样一个状态,没有真正的引入到我们这个正式的引入到这个GDK当中啊,更别提说商用了,对吧?啊,但是呢,我们这个ZDC已经表现出来良好的特性了,好大家来看这呢,是我们测试的这个数据啊,当然不是我测了啊,这个官方呢发布的这个测试数据,我们现在呢,主要剩下的呢,就是parallel parallel这个吞吐量我们说还是不错的,对吧,这个j first,还有呢,现在这个ZJC啊,做一个对比,这个对比的话呢,我们先来考虑的是这个叫吞吐量是吧?哎,先来考虑这个叫吞吐量,这个吞吐量呢,目前我们是,呃还是呢这个ZDC,因为呢,它是以低延迟是不是为首要目标啊,所以这块呢,咱们还是考虑它这个低延迟为首要目标啊,挂着。
05:12
他这样的一个任务,挂着这个任务的情况下呢,我们来看一下发现呢,呃,在低延值为首要目标的这个吞吐量的这个测试当中啊,咱们这个ZJC稍微的是弱一点点,但是呢,已经是很好了啊,它呢,你看通过这个数据对比,已经能够达到99%的这个啊,Parallel这个llel这个的性能了,然后呢,比我们这个G1的话呢,是不是还靠谱一点。啊,比它的话呢,这个吞吐量呢,还能稍微再再大一点啊,还能大大一点,这呢是在它呃,以这个低延迟为首要目标,这个还保留的这个情况下,如果说呢,不考虑说这个电延池控制在比如说这个十毫米内,咱们可以比如说十毫秒到这个100毫秒这样一个范围之内,那我们这个Z它的压力就小一些了,那么此时呢,它这个数据那我们发现呢,就比这个parallel呢和这个g first呢,就性能要更好一些了。
06:01
哎,他能达到70%以上的这样的一个情景。是吧,哎,70%这样的一个数据的一个情况啊,那么这两个的话呢,就要差一些。啊,就要差一些,OK,这呢还算是咱们这个CJC是不是它的个弱项啊,哎,它的弱项呢,实际上是这个吞吐量对吧,跟这个深圳豆呢是类似,然后呢,我们接下来比较一下它的强项,它的强项呢,就是我们叫低延迟。这个图呢,我们是有三个对比项的啊,你一看,诶这不俩吗?诶,因为前面的这个数据呢,实在是太优秀了,以至于说呢,你以为都忽略掉它了是吧?这呢,咱们是线性的一个标尺啊,线性的一个标尺实在呢看不清楚了,咱们呢,不得不做一个非线性的一个标尺了,这儿呢是十毫秒,所以呢,大家会发现,不管是这个平均的停顿时间,还是百分95%的比例的,99%的,99.9%的,还是最大的停顿时间,不管是从各个这个指标上来看,咱们这个ZJC,你看它是不是都可以把这个停顿时间控制在这个十毫秒以内呀。
07:02
哎,都达到这个要求了,而我们其他的这个呢,你看差出来的是不是好几个数量级啊,在这块呢,你看它已经到200毫秒,而我们这个是十毫秒以下,至少呢,这块是不是就差出来20倍啊。啊,这个性能是不是实在是太优秀了,所以说呢,你看我这块用这个令人震惊的是革命性的,是不是一点不为过呀。啊,一点不为过啊,大家应该看这个表呢,应该非常清晰的能够得到我们刚才说的这个结论啊,啊虽然说处于实验状态,但是呢已经表演,那这个已经表现的非常的亮眼,未来呢,在服务端,在大内存的场景下,在低延迟为首要目标的一个呃环境当中,我们这个ZDC一定是能够凸显出来的。啊,就是当有一天的这个JJC基本上是可以确定下来的时候呢,它一定会替换掉咱们这个g first的。啊,所以现在呢,大家如果你有兴趣想提前学习的话呢,你可以呢,开始着手呢去学习这个JJC了啊这块呢列了一本书啊列了一本书,你可以呢买这本书呢,可以提前看一看啊,可以提前看一看啊行,这呢是我们说的这个ZJC,然后呢,在这个嗯JDK14当中,关于这个JJC呢,这块还有一些这个新特性的一些变化啊就可见呢,这个ZJC呢,它就是要受重视了,所以每个版本呢,它都会有一些小的变化啊呃,之前的话呢,我们都只能使用在这个Linux环境当中,在JDK14当中啊这块呢,可以在这个呃Mac操作系统上和Windows操作系统去使用了。
08:27
啊,使用的时候呢,呃,记着我们这个还需要呢,去加上这样一个参数啊叫use c GC啊因为呢,你在实字当中,咱默认的也是这个j first了是吧?啊使用的话呢,显示加上这个参数啊,再把这个参数呢,就是允许呢去解锁这个实验性质的这样的一个呃,行为啊,因为现在它还是一个实验性质的。对吧,哎,这呢是咱们说的这个,呃,JDK14的这个新特性啊,我在这稍微再写一下啊,JDK14的。看新特性行,那么关于这个CJC啊,咱们就介绍到这儿。
我来说两句