00:00
行,那么咱们整个这个上片啊讲到最后啊,咱们再谈一谈垃圾回收器的一个新发展,前面的话呢,咱们一共是讲了叫七种经典的垃圾回收器,对吧?诶经典垃圾回器呢,我们已经讲完了,最后呢是以这个j first呢收尾,这呢也是咱们目前这个JDK当中默认的垃圾回收器啊,准确的说呢,是我们这个houseboard虚拟机当中默认的这个j first垃圾回收器,对吧?好,那么我们说未来这个发展的话呢,是什么样的呢?首先的话呢,提到了针对我们目前的这个七种垃圾回收器啊,他们各自的命运啊是不一样子的了,在后续的使用当中,我们针对于这个g first垃圾回收器啊不断的进行改进,诶这个呢,大家也能够看到JDK9以后啊,你有意识的去关注一下各个版本新特性的时候,你会发现呢,这个j first呢,诶不断的再去做优化啊,都会在相应的新的性当中呢,会写明啊,那么原来我们认为这个缺点,比如说串行的这个for GC,咱们也提到过这个for的串行的这个stop word。
01:00
性性能就比较差对吧,包括呢,这个呃,Car table呢,这个扫描的个低效卡表,那针对于我们那个叫remember set,咱们使用的时候呢,提到一个叫卡表了,呃,扫描的一个低效等等,都已经有了一个大幅度的一个改进。而且呢,在这个GDK10以后呢,这个for呢,已经是一个并行的来执行了啊并行执行呢,我们这个垃圾回收呢,这个速度呢,相对来说就更快一些是吧,在很多这个场景下呢,它的表现还略优于parael g。啊para jc啊,OK,行,这呢是我们说的这个叫G1啊,不断的啊g first不断的被优化,被改进,那么又提到了我们这个叫SJC,这呢也是咱们说最早出现的一个垃圾回收器啊,是一个串行的,虽然说呢,它比较古老,设计的还比较简单啊,但未必呢,它就过时了。啊,就是最经典的这个最早的这个,哎反而呢,在我们这个新的这个场景下啊,有了它的一个应用的一个舞台,真呢叫serveless啊等新的场景下呢,我们C,哎JC呢,反而找到它的一个舞台,就是随着我们这个云计算的兴起啊,我们在很多是无服务的这个场景下呢,去使用,哎这个呢,更适合我们这叫Co jc。
02:08
那之前呢,咱们商务去年还开了一场讲座啊,当时呢,还邀请到这个阿里这两个P8的这个这个级别的人物啊,给大家呢,做了就是其中有一场呢,就是关于这个server场景下的一个这个开发。啊,这个啊,不过咱们好像这个有有那个视频啊,在商务官网上啊,大家可以去找一找,行,这是我们说的这个叫呃,这个zero jc就是发展也还不错是吧,一头一尾,然后中间这个呢,呃,过程当中这个CMS呢,就比较不幸了啊,由于呢它算法设计上的一些缺陷,那虽然说呢,现在还有比较大的一个用户群体,但是的话呢,我们在这个JDK官方的这个house party虚拟当中,我们在九中废弃啊,14当中被移除了,当然了,我们在这个其他这个虚拟当中啊,还可以考虑去使用这个CMS。啊,还可以考虑去使用这个CMS啊,但是目前能能看到在这个官方来看的话呢,已经不推荐我们再去使用这个ACMS了,行这呢是针对于咱们这个七种垃圾回收器呢,它的一个,呃,目前的一个变化情况,然后呢,我们来着眼于这个未来啊在JTK11的时候呢,我们出了啊这个新特性当中出现了两款关于垃圾回收器这块的一个介绍啊,分别呢叫garbage collector是吧,一个呢叫做exce啊,No option啊garbage collector。
03:26
这个对应的是我们这个GDP的叫318是吧,然后还有一个呢,叫333出现了一个叫做ZJC,号称呢是啊叫low啊latency,就是说低延迟的一个垃圾回收器,这呢标识了一个叫实验阶段,到目前呢,也还是一个实验阶段啊,就是咱们JDK14当中,那么上面这个呢,就比较简单啊,叫一中JC,这呢我们有关于它的一个地址是吧。啊,关于他的一个地址啊,把这个地址我们整个粘过来,这个呢,就是咱们在这个open jdk当中呢,关于这个叫Excel jc的一个介绍啊,他的一个介绍,嗯,这哥们儿叫no option说无行为什么意思啊啊咱们简单的说明一下他就可以了,就是这个垃圾回收器啊,叫他垃圾回收器呢,感觉都稍微有点牵强啊,就是他呢,只做这个内存的分配啊,不做这个垃圾的一个回收。
04:15
啊,不做垃圾的回收,也就是说呢,我们运行完以后的话呢,直接就退出程序了是吧,对于有这样的一些场景的行为的话呢,我们使用这个1JC就比较合适,内存分配分配完以后呢,直接程序结束。啊,这我们称为呢,叫无操作的垃圾回收器。啊,这个无操作的就是无回收的回收器啊,就成这个意思比较特别是吧?行这呢就叫EXGC,然后下边呢,提到这个ZJC呢,就是可伸缩的D延迟的垃圾回收器,这个呢,也是咱们重点呢,要给大家讲解这个,当然了,咱们在讲解这个Z这次之前啊,咱们先在给大家引入另外一个叫做神JC。说为什么先引用它呢?嗯,因为咱们最后要用的是这个JJC,你先上了个大餐的话,后边这个就没法上了,是吧,就跟说呢,你去吃北京烤鸭,然后咱们先整几个小菜,你先尝一尝,然后呢再吃北京烤鸭,你现在上来就来烤鸭了,那你那个烤鸭后边还有几个菜是不是也不吃了?
05:07
对吧,诶一般呢,咱们说这个表演节目也是最后那个叫压轴的啊,最后一个是最重量级,你把最重量级的放到第一个后边没人看了是吧?诶咱们呢,先来说一下这个叫圣JC,然后咱们再说这个ZJC。OK,这个神do j c的话呢,首先这个单词啊,非常难念,但是一说到这个神do,我的话呢,我一查,诶,它是一条河,然后呢,诶,我也不知道我怎么想的,就想到了这样的一首歌。你看我还特意截图截下来啊,因为这首歌呢,对于八零后来讲,我觉得至少是比较有情怀的。啊,这首歌呢,我想必想必呢,大家应该都听过哈,叫张丹ER,叫take me take me home country road是吧?哎,这首歌里边呢,就提到了,说这个诶神do啊,JC啊神do啊,这个river啊,不是JC了,这就提到呢,有一有一条河就叫做神啊。啊,这是美国的一条河。所以这个命名的时候呢,就用了这条河的这名字,但是对于咱们中国人来讲呢,这实在是太长了是吧,这个你让我写我肯定也写不出来啊,顶多呢就是会念而已啊,行,这呢就是提到了这样一个和嗯,然后这个这first垃圾回收器呢,成为默认的回收器呢,已经好几年了,咱们从JDK9当中就已经是了啊,那么关于这个新的垃圾回收期呢,我们主要关注的一个叫做ZJC,一个呢叫做神德JC,他们两个的特点呢,都是主打这个叫D延迟的啊,或叫D停顿时间的。
06:28
那么关于这个圣这些呢,咱们先做一个介绍。啊,先自我介绍,你看呢,我在这个深圳JC前面明确指出来,它是open jdk的。啊,还明确指明说是open jdk,那对应的另外一个JDK呢,是不是我们称为叫Oracle jdk啊,就一个呢,是商业版的,一个是我们说叫开源版的,对吧?好,那首先呢,说这哥们儿呢,命途多舛啊,这个深圳特这些呢,他是众多的JC当中最孤独的一个,为啥呢?因为其他的这一波啊,就是根正苗红全是官方推出来的,就这么一个啊,是这个第三方推出来的,这个谁啊,叫这个red t啊,红帽公司啊推出来的。
07:08
看他推出来的,那推出来以后呢,这孤零零的站在这儿,是不是就被这一帮子排挤啊。啊,排挤排挤到什么程度啊,排挤到呢,在这个Oracle这个JDK当中,竟然呢,都没有这个神JC。大家你想象一下啊,咱们通常说呢,叫Oracle jc是这个商业版的,然后呢,这个open jdk呢,是我们说的这个叫开源免费版的,那一般情况下你能想到是不是收费的这个功能呢,正常来讲要多一些是吧,比如说你这Oracle jdk呢,你有四个功能,那你这个open jdk呢,正常来讲是不是你就少两或者三个,总归呢是不是应该少一点。咱们装这个idea呢,也是你那个社区版的,跟我们这个旗舰版的,旗舰版收费,社区版不收费,那你旗舰版的这个肯定功能要比社区版要多一些,这很正常的,对吧,但是呢,你在这个JD12中,你竟然发现呢,说在这个open jdk这块竟然呢还有东西比这个Oracle jdk还多。
08:02
多了一个深的对我JC是吧?啊,对吧,哎,就免费的里边反正功能更强大了啊很奇怪是吧,诶主要原因呢,就是因为这个Oracle呢排挤他,哎就不给他在这个官方的这个商业版本当中出现。啊,或者换句话说呢,这个ZJC啊,人家本身呢,做的也非常的不错啊,就不给你加到这个Oracle的这个官皇的这个里边了啊,就是当然我们是冠冕堂皇的这样来解释一下啊行,那我们首先来看下这个神内多这个J些呢,它的作用是什么呢?它的呃目标呢,是希望在GM的这个内存回收方面呢,实现一个低停顿的一个需求。啊,就是我们现在呢,跟咱知道这个互联网项目越来越多,包括呢,咱们这个手机也是一样,跟用户交互的时候呢,是不是尽可能的希望这个延迟要短一些是吧,这也是咱们近期的这个垃圾回收器出现了一个主要目标,就是要降低这个延迟的这个时间啊,然后这个神德多这个这些团队对外宣称啊,这句话说的还是非常牛的啊,但事实上呢,这个做的呢,还稍微差点意思,他呢说嗯,暂停时间跟堆大小无关。
09:06
啊,这一句话抛出来呢,就非常的具有分量,咱们知道呢,这个堆空间你越大的时候呢,当然我们说越好一些是吧,当然你要是进行这个JC的时候呢,暂停时间呢,正常来讲还是会受到影响的啊,它这块是无关啊,完全的不相关了,不管呢,你这个堆设置的是200兆还是200兆,呃,200GB啊,我们99.9%哇,这个说话还是非常的满的是吧,99.9%的这个概率呢,我们都可以把这个停顿时间限制在注意十毫秒。十毫秒啊亲,非常短了啊,已经非常短了,这咱们说这一一百两一一两百毫秒呢,实际上都还算是正常的啊,他这块呢,说叫十毫秒。但是实际的性能呢,我们还有待这个参考啊,还收你这个,呃,负载量的这个大小啊,这块呢,它就官方发布了一个测试的数据,这是在一六年发的啊,这个已经好几年了,嗯,针对这个ES呢,我们对200兆的200GB的这个维基百科数据呢,进行一个检索啊,在这个过程当中呢,我们看一下这个深圳德这些的它的一个测试数据。
10:07
哎,来咱们直接来看啊,这呢是我们现在使用的这样的几款垃圾回收器啊,因为这个CMS呢,也算是一个低延迟的,所以把它呢也引入进来了,整个呢,这个程序运行的时间啊,这个总停顿,最大停顿和平均停顿,咱们先来看后边吧,因为呢,你不是号称说这个,呃,暂停时间这块呢,比较有优势嘛,那我们看一下这个数据。啊,咱们就直接看最后的平均数据吧,当然其实你看前面也都能看出来哈,整个来看的话呢,这个数据从停顿时间来看,是不是还是非常漂亮的呀。啊,相当于呢,是不是有这个数量级上的一个变化了。你看我们这个CMS,包括这个parallel这个这些,你看他们这个是800多这个这个毫秒是吧,我们这呢只有50多毫秒啊,这个这份的话呢,至少我们这块看到比CMS呢,是不是还靠谱一点是吧。呃,在停顿时间方面呢,确实不错,但是呢,似乎也没有达到你所谓的这个十毫秒,对吧。
11:02
啊,当然这块我们说的这个叫停顿时间哈,人家呢是单对单纯的某一次的这个时间啊,行,这块呢,是我们说的这个叫停顿时间的一个情况,然后的话呢,大家再往前看这个事儿啊,就没有这么乐观了。啊,没有这么乐观了,整个呢,我们对二十二百这个GB的这个危机百个数据呢,进行检索的时候呢,发现这个程序运行时间的话呢,反而是那多这些呢最差。啊,你看我们这个病情,它它反而更好是吧?哎,就是越往下呢越好。他就成这样的场景了。啊,这其实也正常对吧,咱们说的你这个这个叫什么暂停时间呢,越来越好,对应的这个吞吐量呢,是不是就相对来说越来越差,就此消彼长的啊,身上多我这些呢,就会发现在这个吞吐量方面,吞吐量这个方面它有了一个明显的一个下降,200多秒跟将近这个快快一倍了,是吧,这个时间呢,我们觉得还是稍微的差点意思的。啊行,但至少呢,我们能够看到呢,在跟用户交互这方面呢,它的停顿时间上呢,确实是有了一个很大幅度的提升,这呢还是值得赞扬的啊行,那么关于我们这个深圳多GC呢,咱们做一个小结,它的弱项啊,就是在高运行这个负担下的吞吐量呢,还下降的比较明显,强项呢就是这个低延迟,刚才我们也都能看到这个情况啊,那么关于这个深圳德这个GC,它的一个诶垃圾回收的过程呢,诶这个官方发布的一共是分成了九个阶段。
12:30
啊有九个阶段在这儿呢,咱们就不加赘述了啊,一方面的话呢,是这个咱们也没有必要去研究了,毕竟官方呢也不用啊,咱们呢,作为这个极客的话呢,你可以关注关注啊,就不要把这个时间呢就花到这儿了,另外呢,我们是不是还有后边那个ZJC了是吧?呃,ZCC的话呢,应该算是官方呃发布的一个,而且目前来看性能呢,比我们这个神圳深圳多这个这些还要靠谱一点啊,那么如果大家有兴趣呢,去再多稍微研究一下这个神圳德这些在咱们商务官网的这个鼓励学院上,或者呢,大家去这个哔哩哔哩上啊,诶哔哩哔哩上你去搜那个JAVA12的新特性。
13:05
诶,基本上你看到的其实也都是咱们上古五发的那一套视频啊,也是我讲的里边呢,就提到了一个神多这个JC了啊,可以再稍微的拓展一下看看啊行,那么关于这个深豆啊这些啊,咱们就说到这儿。
我来说两句