00:00
那在讲完CMS垃圾回收器之后啊,咱们来看一个重量级的垃圾回收器,称为呢叫j first垃圾回收器,也是目前呢,咱们在这个JD8以后,那就是从九开始呗,JDK版本当中默认的使用的垃圾回收器叫g first,这呢,如果用最简单的一句话来概括它呢,我这写的叫区域化分带式,这个分带式呢,指的就是我们垃圾回收器针对的主要是堆空间,那堆空间的话呢,我们分成呢,叫新生代和老年带对吧,或者叫养老带,所以这呢叫分带式,那么区域化的话呢,指的就是说这个G1的话呢,它的主要的啊原理做了一个优化啊,这里边提到了一个概念叫做region啊,这个region呢,我们翻译过来呢,就称为这个叫区域,诶是这样个原因,好,那我们来看下边这样的几个点,首先的话呢,我们为了更好的去理解这个g first啊,咱们这的话呢,问了几个问题,通过这几个问题呢,我们有一个大体上的一个了解。好,首先呢,我们来看这个点说呢,既然咱们前面已经有了几款比较强大的这个垃圾回收器了,说为什么呢,还要发布叫garbage first呢。
01:01
对吧,那想必呢,很多同学也会有这样的这个疑问,为什么这么讲呢?咱们前面讲到垃圾回收器的时候呢,说主要呢,考虑他们的性能指标呢,有两个,一个呢,我们称为呢叫做吞吐量,我就简写了叫吞啊,另外一个呢,我们可以关注的叫做暂停时间,或者你说叫响应时间啊,也可以啊,那么吞吐量这块呢,我们有一个比较适合的,是不是我们提到叫parallel啊?哎哎,这个写错了是吧,哎提到呢叫parallel,然后呢,在这个老年代呢,我们有parallel old啊,使用这两两个垃圾回收器的组合呢,我们能够达到这个吞吐量最优,那而且的话,我们说这个PI呢,也是我们这个GP8当中的,诶默认的垃圾回收器啊。那另外一个呢,就提到这个暂停时间,我们希望呢,追求的叫低延迟,那在低延迟方面的话,我们有对应的叫,哎是不是CMS啊,哎这个垃圾回收器啊,你在配应配合着我们,哎新生代里边那个叫排钮是吧,垃圾回收器,那也就是说呢,我们在这个吞储量方面和暂停时间方面都有,哎对应的不错的垃圾回收器了,为什么我们这里边还要引入叫GA比first呢?
02:05
对吧,诶你看这呢,我们有相应的描述,首先的话呢,是针对于我们说应用程序,面对这个业务场景,这个业务场景呢,我们说越来越庞大啊,复杂用户呢也越来越多,诶大家想想是不是这样子的啊,你比如说我们这个呃,两千二零一几年就刚开始的时候啊,具体记不清这个双11从哪一年开始了啊,诶刚开始的时候呢,双11晚上大家买东西的时候,那个并发量实际上还比较小啊,为什么现在说阿里巴巴能够一下子承载这么大的这个这个这个高并发的场景呢,就是针对于双11的时候,因为他这个业务也是稳步在增长的,对吧?诶当然了,还有这个后台这个呃,不断的去优化啊后台这个场景啊。那这是一个,另外呢,你想随着这个大数据的一个蓬勃发展,现在呢,大家用的这个移动端,美团也好,滴滴也好,实际上每天会产生极其庞大的这个数据量,对吧,包括呢,大家刷抖音啊,刷头条诶等等都是这样子的,哎,就是我们这个业务的话呢,现在是越来越复杂,那就要求我们不断的要去优化咱们的这个垃圾回收这个过程。
03:05
诶,要不断的去优化这样的一个场景啊,那么这个GAP first呢,呃,是JDK7当中这个引入的一个新的垃圾回收器,可以看作是呢,当今的收集信息技术发展的一个前沿成果。啊,到目前为止呢,咱们这个这first的话呢,算是比较成熟的啊,那现在呢,还处于这个实验阶段的呢,就是我们后续要引入的这个叫ZJC,那总有一天的这个ZJC肯定是要替换掉这个g first的,毫无疑问啊,毫无疑问。那么另外一个场景呢,就是说呃,不断增加扩大的内存和不断增加的处理器的一个数量,那么呃,硬件水平的不断去提升啊,也有助于呢,我们可以去更好的提升垃圾回收的这个性能。对吧,诶一说到这儿呢,想起这个人工智能崛起的时候,我们说需要几个大的条件,比如说你这个,呃,硬件性能的一个提升,那主要呢,涉及到叫GPU是吧?呃硬件性能提升,然后呢,我们是不是有比较庞大的这个数据集啊,诶大数据的出现呢,就给我们提供了更多的这个数据集,然后呢,更优的这个算法,哎算法的话,以前呢,使用的叫机器学习,现在我们更多的是不是开始替换成叫深度学习,对吧?诶项目的一些这个算法,那么把这三个合在一起,那就出现了我们第三次啊这个人工智能的这个崛起,也就我们现在呢这个,诶看到的语音识别啊,这个无人驾驶啊,对吧?哎,这个自然语言处理啊,哎,这样的一个场景啊,图像处理,这都属于我们第三次,哎,人工智能这个高潮,那是有这样的几个环境是吧,条件都具备的时候呢,才会迎来这个AI的一个大爆发,嗯,那针对于我们这个,呃,垃圾回收器,它做一个性能提升的话呢,也是啊,由我们这个硬件呢,在里边起到很好的一个作用。
04:40
啊,起到很好作用啊,或者我们换句话说呢,就是呃,为什么有了前面几个的话呢,还要发布新的呢,呃,你可以从一个哲学的角度来看啊,这个我们往好里说呢,说这个人呢,是不断的去追求更好的东西的,对吧,也就说人的这个追求啊,是无限的啊就像女人的话呢,永远她会觉得自己还可以更美一些是吧?哎,这个女人追求美的这条路上呢,也是不断的,这个这个这个也是没有极限的是吧,应该这样讲啊,那要是往换一个词,往这个稍微呃不好的这个词上说呢,就说这个人性呢,我们说也是贪婪的对吧?啊就是比如说你一个月你挣到这个5000块钱的时候啊,你可能会想我一个月能不能挣1万块钱,那挣到1万的时候呢,你说我一个月能不能挣到2万啊,挣到5万,挣到10万啊,我能不能买买一个房子对吧,可能想的就会越来越多啊,就是相当于是叫贪婪是吧?嗯。
05:33
哎,一说到这儿的话,就想起一个段子哈,说这个,嗯,你为什么结婚呢?啊,说啊,因为呢,我爱上了这个女人是吧?哎,那你以为这就是人生的结尾吗?啊,那这只是电影的这个情节对吧?啊,那下边呢,就会发生说你为什么离婚呢?哎,说因为我爱上了别人的女人啊,不对啊,因为我爱上了别的女人是吧?啊,这个别的女人和别人的女人还是有很大区别的是吧。哎,就这样子啊,行这呢,诶我们接着呢,看这样的一句话啊,说这个官方呀,给这个这first设定那个目标,诶这个目标啊,大家最好能够记一下,就记住它啊什么目标啊,就是我们希望呢,在这个延迟可控的这个情况下,诶,获取尽可能高的一个吞吐量。
06:19
啊,所以呢,才担当起啊,就是我们的g first叫全功能收集器的一个重任啊,那因为呢,我们说这个垃圾回收器呢,它想没有这个暂停时间是不可能的,那任何垃圾回收器,包括呢,我们后边讲的一个ZJC都是有暂停时间的啊,都有暂停时间,那既然有暂停时间,我们就想在可控的一个暂停时间之内啊,我们尽量高的提高这个吞吐量,就是把这个指标呢控制住,然后这个呢尽量的高。对吧,那就好比说,诶,我们在保证不出现这个,现在这个疫情失控的情况下呢,咱们尽量高的是不是恢复这个复工复产呀。咱们现在其实就是这个目标,对吧?啊,你说这个疫情完全去呃消灭掉这个不太可能,因为咱们还没有疫苗,所只能呢,在这个不让这个疫情失控的情况下呢,就是可控的范围之内,我们尽可能的去复工复产,哎就像这样的一个场景一样啊,那下边呢,提到叫所谓的叫全功能的收益器,诶它呢,主要针对的实际上是我们这个像诶看这也行啊,咱们提到的呃,这个这份垃圾回收器呢,它是不是既针对于新生代,又针对于老年代,对吧?诶它叫全功能的,而我们前面讲的那六个的话呢,他们只能适用于新生代或者是老年代。
07:30
诶这里是比较有区别的,因为呢,咱们前面提到说像新生代主要呢,是不是就复制算法,老年代的话呢,主要使用的叫标记整理算法,像这都是标记整理,它呢是标记清除,对吧,就是新生代老年人用的算法不一样了,所以呢,我们这块呢,就区分出来,诶是不同呃,收集不同代的这个收集器,而对于我们这个j first垃圾回收器的话呢,我们称为呢,叫这个分区算法是吧?哎,咱叫分区算法啊,就是又有了一个新的方式。啊,包括呢,我们从这个图示上来看的话呢,你看跟我们前面讲的也不一样了,前面都这个样子,你看它这个长这个样子是吧,这一个个小方块呢,实际上就是一个一个的region啊,就是我们所说的这个叫区域啊。
08:10
好,那咱们呢,接着来往下说。下一个问题呢,说为什么名字呢,叫garbage first呢?哎,为什么名字叫他呢?呃,这个我一开始接触这个,呃叫j first的时候呢,我也会有这样的疑问,呃,而且呢,当时念的时候都爱念叫J1是吧?啊一个呢,就是它本身就是一,另外的话呢,这个念G1也比这个念这个first呢,少几个音变少几个音标是吧?啊这个我觉得念G1呢也没啥问题啊,大家都能听得懂就可以了啊,那其实语言就是这样的,大家如果都认可了,那那你就都可以这样叫。啊,你要是这样念,别人都不知道你在说什么,那你教就不行了。啊,就比如说这个,呃,给你点颜色看看是吧,哎,Give you some color to CC是吧,这个我觉得大家较多的话呢,是不是外国人也会这样叫了,就是吧,哎,他能听得懂就可以了,我觉得啊。行说为什么名字呢?我们叫做garbage first呢?哎,这里边我们列举出来这样的原因了。
09:06
啊,一开始的时候我也想说,是不是因为说呃,他敢称第一是吧,就是是因为他这个比较自信是吧,或者呢,他要是敢称第二的话呢,是不是没人敢称第一呢?所以干脆呢,他就叫G1得了,嗯嗯,好像看了看也不完全是这个原因是吧?虽然说到目前为止呢,我们说这个G1的性能还是不错的,当然你不能保证未来是不是就没有人能够超过G1啊,诶是这样的啊,所以呢,我们这个并不是主要原因,是因为这个G1是最牛的啊,还有其他原因,那我们就看看下边这个说明。说呢,这个J啊是一个并行的回收器啊,意味着我们垃圾回收环节呢,实际上可以是并行的去执行的啊,它呢把这个堆内存啊分割成很多不相关的区域,诶很多不关的区域我们称为呢叫做region啊,叫做这个region啊,就刚才我们看到了一个一个小方块一个小方块的,诶那么这个region的话呢,他们在物理上呢,是可以不连续的,那使用不同的region呢,我们可以来表示叫伊甸园区,幸存者零区,幸存者一区,或者叫老年代。
10:02
注意,比如我们这呢是一个region,这是一个region,当然这个region大小都是一样的的啊,那这个画的呢,稍微是有点大小不一了,这个这是不同的region,然后这个region的话呢,我们让它表示叫一点区,这个呢叫S0区啊,这个叫S1区啊,这个呢,我们叫O的区啊,这个都是可以的,就是它呢来表示不同的这个角色是吧。OK,那么接着往下说,呃,这个这份的话呢,它有计划的避免呢,在整个堆当中进行全区域的一个垃圾回收。啊,不管我们说的MJC也好,还是for j c也好,我们原来都是分代式的那样去回收,对吧,那这个J1的话呢,我们叫j first,它呢会去跟踪咱们下边这些region。啊,就是判断一下你各个region震当中这个呃,垃圾的一个价值,什么叫价值啊,就是我要是把你整个这个region回收的话呢,你这个能够获得多大的空间呢?因为这里边我们说有一些是对象,但有一些是不是还是空余的空间啊,啊就是我们要是把整个这个区域呢回收的话呢,这个能够获得这个空闲空间的一个多少,那以及呢,这个回收所需要时间,这个我们都会去做一个衡量,那这个衡量完以后呢,我们相当于就衡量出不同的这个region的一个价值。
11:08
能理解吧,比如说你这个空间的话呢,快满了,我们要回收,结果回收完以后呢,发现大部分对象呢,都回收不掉,还是可达的对象,那你这时候呢,回收它的意义就很小是吧?然后另外一个对象的话呢,虽然这个使用率呢,比这个稍微小一点,但是呢,这里边儿基本上全是垃圾,那我们要回它的话呢,是不是这个呃,效率上就更好一些是吧。诶所以说的话呢,我们去衡量每一个这个region的一个价值,诶根据这个价值呢,我们去有一个列表是吧,诶一个优先列表,然后咱们呢,诶根据你允许的这个暂停时间,我们呢,优先去回收那个价值比较大的。呃,优先呢,就回收那个价值比较大的,哎这个情况啊,由于呢,这种方式呢,它的侧重点呢,在于回收诶垃圾最大量的一个区间,哎,所以呢,我们就给这个这一起的名字叫哎垃圾优先。就是先优先回收那些价值比较大的这个region啊,所以呢,我们叫做gar壁纸first。
12:03
哎,叫做gabi first啊,那么回收完以后的话呢,我们这个region呢,相当于就是个空闲的了,那咱们也会专门维护一个叫呃region空闲的,他们一个叫什么一个链表是吧?诶就是你看哪些这个region他们是空闲的啊,会有这样一个链表。啊,加到这个列表当中,就把你回收以后的这个空的这个位置啊,这个咱们后边呢,也都会提。行,这呢是我们提到这样的一个事情,呃,然后接下来的话呢,我们这块又是一个概述说呢,Gary first,它是一款面向服务器端的,呃,应用的这个垃圾回收器主要针对呢,就是配备多核CPU以及大容量内存的一个机器。诶,你看这块呢,说的非常明确啊,以极高概率满足JC停顿时间的同时啊兼顾吞吐量,就是我们会设置啊这个在G1这块啊,咱们会设置这个停顿时间,使用相关这个参数,那么比如说我们设置成是这个叫十毫秒是吧?哎,并不是说呢,我们这个真正在实施当中呢,说一定能够保证所有的这个SWSTW的都低于十,十毫秒,只能说呢,我们以极高的概率是吧,或者说呢,以这个期望值是这个十毫秒,呃,作为一个标准,我们在尽量满足这个数的情况下呢,尽可能高的去提高这个吞吐量,诶这个大家要注意一下这个问题啊,那后边呢,我们就具体展开说,怎么它就能够保证说诶尽量满足这个,诶限定的这个暂停时间了啊。
13:24
然后下边呢,就提到一下,我们在这个JDK7的时候呢,正式启用它就把这个啊experimental就是这个试验性的这个标识呢就去掉了,在JDK9当中呢,就是咱们默认的垃圾回收器,咱们呢,是不是之前也带大家都看过是吧?哎,在九中呢,就是这个g first啊,那如果说呢,你在这个JD8或者以前的版本中,你要想使用这个j first的话呢,就显示的使用我们这个参数就行。啊,就是G1JC是吧,哎整个呢,我们这个使用不同的垃圾回收机的套路呢,是一样子的,就use啊,然后后边这个JC就看你中间呢,你想用什么了,哎就这个意思啊行,那么因为呢,在GT9中我们已经是默认的垃圾回收器了,所以呢,我们就取代了像前面呢,一个是CMS,你这个呢,是主打D延池的一呢parallel啊parallel old的主打这个高吞吐量的哎这样的这个组合了,哎就把它们给替换掉了,那也就是我们这个G1的话呢,它既兼顾到这个低延池啊,就是它是一个可控的这个垃圾回收暂停时间的啊,然后同时的话呢,我们尽量呢提高这个吞吐量啊,就是靠近我们这个吞吐量的这样的一个哎优势的这个组合。
14:26
嗯,那同时的话呢,在呃,CMS呢,在这个九当中被标记为de了,这个咱们前面已经说过了啊,然后在GT14当中已经把它给干掉了啊,因为现在呢,就是我们说这一的天下。OK啊,那首先的话呢,咱们对这个G的话呢,有一个大体上的了解,然后接下来的话呢,咱们看一下这个,呃,这个叫G或者叫g first垃圾回收器,它呢主要的几个特征。
我来说两句