温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
下边啊,咱们再介绍一下这个叫分区算法,这个分区算法啊,其实主要的针对还是咱们叫g first这个垃圾回收器来说的。啊,这个把我们对空间呢进行了一个分区啊,分成这个叫region来咱们看一下说一般来说,在相同的条件下说,这个对空间越大呀,咱们一四这个GC呢,耗费的时间呢就会越长,那有关这个GC产生的停顿时间呢也会越长。很好理解对吧,那为了更好的去控制这个GC产生的这个叫停顿时间,就是延迟时间,那我们呢,可以把一块大的内存区啊,分割成很多的小块,那根据目标的停顿时间,比如我们要求停顿时间控制在多少毫秒以内,对吧?那十毫秒以内,那这时候呢,我们每次合理的去回收若干个小区小区间,而不是呢,去回收整个堆,从而呢,减少一次GC所产生的停顿,也就是说呢,我们这个分区算法的目的啊,跟咱们刚才讲的这个叫增量收据算法是一样子的,目的呢,都是为了降低这个延迟。或者说我们称为呢叫停顿时间,诶,这个咱们讲到垃圾回收器的时候也会说,这也是咱们比较主流的啊,就是当前的垃圾回收器,咱们不断的去迭代,不断的去更新,咱们目前呢,更多关注的还不是这个叫吞吐量了,而是这个叫低延迟。
01:11
这是咱们现在呢,就主流的垃圾回收器啊,或者叫新的这个垃圾回收器更多关注的这个点。就像说我们一个算法更多关注的是这个时间复杂度一样,对吧?OK,那么这呢就提到了说分代收集分代算法,咱们前面讲的都是分代嘛,他呢是把按照这个对象的一个生命周期,咱们把这个堆空间啊分成了叫新生带和老年带,对吧?而这个分居算法呢,不是,它是把咱们这个整个堆空间啊,划分成一块一块的小区间啊,一块一块的小的region啊。嗯,这样一个一个小的region,那那每一个小区间它都是独立使用的,那举个例子大家看,对于咱们这个g first垃圾回收器来讲呢,它就是这样来划分我们的堆空间了,咱们原来说呢,叫分代啊,有一块区域呢,叫新生代啊,这个老年代,然后新代呢,分成叫伊甸园区,Survivor区,而对于我们的这个,呃,这first垃圾回收器来讲,它呢,把我们这个堆空间呢,分成了一个一个的小块,这一个小块叫一个个区间,就是一个一个的这个region。
02:10
那这个region呢,有的呢,是来放这个依园区的这个数据的,有的是放这个survivor区的数据的,有的是放这old的数据,有的是放这个大对象的,对吧?呃,就这样去占用,那这里边这个白色呢,就是一个空白的区域。就是这样的一个逻辑思路。啊,这样的一个思路,行,那每一个小区间呢,他们是独立的,我们呃,独立使用的,我们就可以独立的去回收,如果呢,你限制说我们的这个目标的停顿时间不能高于比如说十毫秒或者这个五毫秒,那你如果有这样一个目标的时候呢,我们下面呢,就去回收这些小小块了,那你要说给我的时间卡的比较短,我就少回收几个,你要说给我的时间比较宽裕呢,我就多回收几个,就是通过这样的方式呢,我们去控制,诶你达到一个理想或者要求的一个目标停顿时间。就是到了具体的这个时间的一个,诶限定范围内了,这呢针对于是咱们这个g first,包括呢,诶,我们还有其他的一些新的垃圾回收器,诶都是考虑这样的一个思想啊,这呢咱们先简单的介绍一下,后边呢,咱们讲到这个g first垃圾回收器的时候呢,咱们再进行一个具体的说明,OK,那这写到最后说呢,这些呢,都是咱们基本的一个算法的思路,提到了具体的一些算法了,但是在实际这个GC的过程当中,我们说呢,要复杂的多,哎通常的话呢,都是一些复合算法的一些使用,考虑到的并行并发啊这样的一些场景,那么我们这个讲到下下下章的时候呢,我们具体看一下所谓的Java给我们提供的各种各样的垃圾回收器,他们的底层是怎么来做的?
03:36
OK,那关于呢,咱们第15章垃圾回收相关的算法呢,咱们就介绍到这儿,那那功利点讲,在面试当中呢,问到这一章的点呢也比较多,然后大家呢,下来呢,把它好好的捋捋啊,好好捋捋啊,当然更重要的目的呢,就是我们还是要清楚这些算法是什么,对吧?诶不是为了公立的,仅仅是为了面试而已啊。
我来说两句