00:00
那关于GC这块呢,刚才我们补充了三个知识,Stop the word,垃圾回收器的分类,以及呢,如何评估一款垃圾回收器的性能,之后诶,咱们过来再来看这个JAVA12这个新特性叫神德JC啊,这个时候呢,我们再来看它这个新特性呢,大家会更清晰一些啊,也就是我们希望给大家讲解这个新特性的时候呢,不只是拿着官方这个文档呢,我们去做一个描述啊,做一个解释就完了,而希望呢,大家能够诶知其然,并且知其所以然,就是为什么说他呢是低挺论呢,什么是低挺论,有一个呃,更多维度的一个理解。好,那么刚才我们那会儿也提到了,说这个神豆这些呢,它的追求目标呢,就是说我们的暂停时间与堆的大小是无关的,那意味着呢,无论将堆设置成多大呢,它的暂停时间是一致的,呃,咱们刚才提到了叫stop the word,就是你暂停时间这个,呃,内存越大,正常来讲,我们说这个暂停的时间呢,就会越长,而他这块呢,提到说暂停时间跟堆大小是无关的,呃,那么很显然我们这个神透啊这些呢,它应该是一个并发执行的,就是我们这个应用程序的这个线程和我们垃圾回收的线程呢,那很大概率它都是一个并发执行啊,因为你要是非并发的一个情况呢,它这个一定跟堆大小这个是是相关性的,对吧,这个应该很清楚哈。
01:21
而且呢,它能够追求的目标呢,是99%的情况下,这个暂停是要小于十毫秒的啊,这个非常厉害啊好,这呢是我们一些概述,然后接着往下走。这块呢,是关于神诺这些的一个参考原理了,说呢,从原理的角度上来看,这个是官方呢提供的一个图,嗯,它的内存结构呢,跟我们这个G1呢是非常相似的,将内存划分为类似于磁盘的,呃,这个棋盘呢叫region啊,那这块我们再结合咱们这个G呢来说一下这个G垃圾回收器呢,呃,就提到了一个问题,就是将这个堆空间的内存。啊,这个空间内存呢,它就不是连续了啊哎,我们首先呢是新生代和老年代,然后呢,把这个空间划分成2048个大小相同的region块啊,这些region块之间呢,它是不连续的,然后每一个块呢,我们去存储相应的一些数据啊,那么你可能是存着这个新生代的数据,呃幸存者,呃幸存者呢,就survivor了啊这个数据啊,包括呢,你可能是这个old的老年代的数据啊,就是一块一块的这个region啊这样的方式呢去存储数据。
02:26
OK啊,那我们这里边呢,叫神JC呢,跟咱们这个J呢是非常类似的,嗯,那么最大的区别呢,就在于它实现了并发的叫疏散环节,也正因为如此,它才能够实现一个更高效的啊,或者叫低延迟的一个啊垃圾回收。那下面呢,是官方提供的这个图,那对应的有这样的九个环节啊,那这个九个环节的细节呢,我们就先不过的去说哈,那要想大家呢,去理解这个九个环节,其实我们仍然可以拿咱们这里边儿提到的CMS和G1啊做一个类比的介绍啊,比如说呃,咱们刚才那会提到了,说一旦呢,我们这个有了暂停时间了,Stop the world,我们进行垃圾回收,那这时候呢,必然会导致这个吞吐量的一个减少,那么CMS它怎么尽可能的降低这个低延迟呢?呃,就是这块呢,提到一个问题,就是说呃,我们在进行stop the word的时候。
03:19
啊,这个stop走word的时候呢,我们尽可让这个时间呢短一些,呃,这个CMS呢,它有四个环节叫初始标记,并发标记,再次标记和并发清除,那并不是在这四个环节当中,我们都会去stop the word,因为这样的话呢,你的延迟一定时间会比较长,那他怎么做呢?在我们初始标记就标记我们某一个对象呢,比如说通过这个呃叫。跟搜索算法,或者我们也称作呢,叫做呃可达性分析,看看到底这个哪些对象呢,是不再被使用了,我们要初始做个标记,那这个时候呢,我们是需要stop the word的,就是不让应用程序的线程再去执行啊,那么这个标记完以后呢,我们下边有个叫并发标记啊,既然提到并发了,就能使得我们应用程序的线程和垃圾回收的线程呢,是可以同时执行的。
04:05
那么既然同时执行了多少,可能会有一些呃,这个标记不准确的情况,所以我们就会涉及到一个再次标记。啊,在这标记呢,仍然会这个提到叫stop the word啊,最后呢,进行一个并发清除啊,所以这四个环节当中,我们只有其中两个环节呢,是需要stop the word,所以呢,诶能够达到一个低延迟的一个情况啊,这是我们说的这个CMS啊,那么对于这个J1来讲呢,其实是类似的,只不过它这块呢,这个环境比较多用到的六个阶段,诶,初始标记跟搜索扫描,并发标记,再次标记清除拷贝啊这样几个环节,那么在这六个环节当中,初始标记呢,需要solve the word。啊,然后并发标记,很显然不需要啊,那再次标记的时候呢,还是需要stop the word,再确认一下哪些对象呢,是我们要回收的垃圾啊,进行再次的一个标记,最后呢,拷贝,哎,我们需要stop the word啊,将存活的对象复制到未使用的reading块当中。啊,这是这样一个情况啊,这呢也能够尽可能的达到一个DH的效果,但它效果呢,没有我们说的这个呃,CMS这个效果要好一些啊属于这样的,那咱们现在呢讲的这个,呃神豆JC的话呢,它呢是分成了九个环节,哎我们这个图当中呢,描述出来了,首先是一个一个的region啊,然后呢,诶这个灰色呢,就是未使用的内存,蓝色的话呢,是已经分配好的,然后我们通过这个标记,大家这块也能看到应用程序的线程跟我们这个垃圾回收这个对应的,这个标记的线程是可以并发这个执行的啊这个并发呢,就能够保证我们是一个呃这个低延迟的了啊这也是我们神豆这些的一个主要特点了,呃,我们做一个标记,然后呢,呃,做一个相应的一个再次标记,做一个相关的清除啊,变成一个空白区域啊,整体上来讲就是我们要保证的一点就是使它呢,能够并发的去执行应用程序的线程和啊垃圾回收的线程,尽可能的啊达到一个低延迟的效果。
06:00
啊,是这样一个情况啊,好,呃,那么具体它使用的这个技术呢,叫啊Brooks forwarding power,呃,这个技术的话呢,这个我去网上搜索呢,相关的信息还比较少,具体它内部是如何实现的,大家有兴趣的话呢,下来可以做进一步的一个这个这个学习啊好,这个呢是我们说的这样的一个技术,那么下边我们做一个信息的一个延展啊。这个我们在GDK11当中呢,引入了一个叫ZJC。啊,包括我们在这个12当中呢,其实对这个JC呢,也进行了一些优化,但是不是一个主要的点了哈,这个或者我们有商业版的啊ZC4,呃,他们三者之间做个对比的特点是什么呢?那这块提到了说我们这个神诺GC呢,是要优于ZJC和这个ZC4的,怎么看呢?首先这个ZJC呢,它的最低的使用门槛是JDK11啊,你要想使用JJC我们必须呢JDK要升级到11这个版本,那么对于很多开发团队来讲,我们这种版本的跳跃并不是低成本的啊,可能会有一些这个相关的一些bug需要你去调试啊,这是这个问题,而且呢,这DC在实际业务当中的表现如何,还需要考量。
07:08
这一个问题,那我们使用这个C4的话呢,嗯,这个需要商业版嘛,只要看到商业版呢,它的第一反应就是需要付费啊,那么现实情况的话呢,就很多公司是舍不得花钱的,就是要么不花,要花呢,那可能一花呢这个就停不住了啊,诶商业版有的时候又配套的其他的一些商业版的软件,这个呢是一个无底洞,所以呢,有时候一些公司几十块钱呢,都不舍得去花啊,所以呢C4呢也不是特别靠谱,那这个神这些的话呢,它在稳定的GDK8的这个更新当中呢,是有所体现的啊,个别公司在h base等高实时性的产品当中也做过相关的一些实践啊,效果还可以,嗯,另外呢,这个ZDC呢,也是面向一个低延迟的,那低停顿时间的垃圾回收器。但是他们二的使用的这个技术不一样啊,Color的poer这是CJC啊,神多JC呢是brook斯poer这样的这个技术啊大家下来呢,可以在呃,对我们这个神诺这些呢,这个使用的技术呢,在进行一个探究,那下面呢罗列出来了,呃,我们这样的几款主流的垃圾回收器啊,相应的一个延迟时间啊,跟我们这个回收的一个百分比之间的一个对应关系,那我们能够非常清晰的看到啊,这个系统呢,呃,随着我们这个执行的百分比的提升,这个变化不大,那这个神诺这些呢,也是一样啊,可见呢,跟这个对空间的内存大小呢,确实关系不大啊,非常的优秀,呃,那么在百分比比较少的时候啊,或者整体来看,这个蓝色呢,代表的就我们这个CMS垃圾回收器啊,也能够就是在神斗这期出现之前,CMS呢,还是作为一个低延迟的主力的啊,垃圾回收器出现的。
08:45
啊,是这样的啊啊parallly old这个主要来回收我们的这个老年代的啊呃,JJC啊,或者叫g first是吧?呃,它的一个对比情况啊,我们看到这个神诺这些还是不错的啊,当然呢,我们说这种低延迟的一个保证呢,它其实是以消耗CPU这个计算资源为代价的啊,那很显然呢,这个CPU计算资源呢要高一些,垃圾回收和我们的应用程序的执行需要并发的执行啊,那CPU呢,这个耗费资源这个是很显然的了哈。
09:15
那么至于说我们这个神豆这些的吞吐量是如何的,呃,并不明朗,所以呢,在企业实际场景当中,我们到底要不要用啊,它这还是一个预览模式啊,需要大家呢在经过实间的一个考量才行啊,目前从实验数据上来看还是不错的啊,属于这样,那么下边呢,是关于我们神诺这些的GM的一个几个调参数啊,大家短期之内呢,可能还不会去应用它,所以这个参数呢,我只是罗列到这儿,就不一一的给大家做一个演示了啊,那么关于这个神透这C呢,后续版本肯定还会不断的进行优化,呃,大家呢,只需要期待它优化好以后啊,加入了我加入到我们这个呃Java s规范当中以后,诶,我们就可以进行一个使用。好,这呢是我们关于这个神作JC这个特性的一个说明。
我来说两句