00:00
那接着呢,我们来看第二个新特性啊,第二个呢,新特性呢,提到一个垃圾收集器啊,这呢引入了一个新的垃圾收集器叫神豆啊啊这个单词呢,比较好,比较难念哈,嗯,中文的念个深度我觉得倒挺好听的啊,这个神豆啊JC它是一个低停顿时间的JC啊,也是一个预览,跟咱们说s Switch表达式是一样的啊,这里边我们看一下啊,首先呢,关于背景和设计思路,说神豆啊,垃圾回收器呢是red he啊,红帽组织在一四年宣布进行了一项这个关于垃圾回收器的研究项目啊,叫poless GC当中的一个实现啊,主要目的呢是针对于GM上内存回收,实现一个低停顿的需求。那如果大家呢,之前对嗯GM张续集没有过多的了解的话呢,这里边你提到这个低停顿呢,你会稍微有一些困惑啊,那讲这神豆啊JC之前我们先给大家补充几个知识啊,那其中第一个呢,就关于这个叫停顿时间啊,停顿时间呢,我们称作叫STW,它呢是一个缩写,全称呢叫stop the word啊stop the word什么意思呢?指的呢,就是在我们这些事件发生的过程当中,也就是说呢,我们程序在进行垃圾回收的时候。
01:13
啊,大家都知道Java的一个主要特性呢,就是垃圾的自动回收啊,当我们在运行Java应用程序的这个线程的时候,诶,我们后台呢,是可以进行垃圾回收的,那么应用线程执行跟我们垃圾回收的这个线程他们之间啊,这个同时都执行,能不能这样做呢?其实是不行的,所以这块呢,我们提到叫stop the word,也就是说当我们这个GC线程发生的时候啊,在进行的时候呢,我们要求停止所有应用程序的线程的执行。啊,举了个例子,就好比是警察在办案需要呢清场一样啊,你这个案发现场就是我们应用程序县城执行的一个场景,那现在警察要办案了,他就保证我们现在呢,现有这个场地呢,是不能有任何的变化的啊,都得停下来。啊,或者再举个例子呢,啊,就比如说周末大家在家啊,这个也不用上班,所以呢,在家看电视,吃零食啊,家里边一顿造整的乱七八糟的,你呢,就好比是一个应用程序的县城啊,把家里边整的非常乱,然后老妈看到以后呢,她要呃清理这些垃圾了,哎,老妈呢,就相当于是一个垃圾回收的一个县程了,那么他在清理的时候呢,他要求你不能动,就是在老妈清理的过程当中呢,你不能再去制造更多的垃圾啊,这个呢就会导致数据的不一致性。
02:30
啊,我们把这个呢,就称作你不能再去这个制造垃圾,这个场景呢,称作叫SW,就是stop the world啊那下面呢,有一个进一步的解释,说垃圾回收器的任务呢,就是识别和回收垃圾对象进行清理啊这块呢就提到了我们如何识别一个对象是垃圾呢?啊提到了叫引用技术算法啊,或者叫跟搜索算法啊,有两种不同的算法了,这个我们不是这里讲解的重点啊说为了让垃圾回收器呢可以正常且高效的执行,诶大部分情况下呢,都会要求系统进入一个停顿的状态。
03:04
啊,因为只有进入进入停顿状态以后,我们垃圾回收的限制呢,才开始去识别,到底哪些对象呢是垃圾,这样的话呢,我们能够保证保证这个数据呢,在某一个瞬间呢是一致的。啊,那么在标记这些垃圾的过程当中,大家不能够让应用程序再去执行,因为这时候的执行呢,会导致我们这个数据的不一致性。啊,某些对象呢,本身这个它,呃,这个在刚开始的时候呢,我们不认为他是个垃圾,结果呢,你又继续的执行它变成个垃圾了,导致这个数据呢,会有不一致的情况啊,这是这个问题,那么ITW的问题是什么呢?就是当我们在进行垃圾回收的时候呢,整个应用程序呢,因为会暂停下来,没有任何的响应,感觉呢,有点卡死的感觉啊,这呢就称为是一个ITW。啊,那下边呢,还有进一步的说明啊,就是STW这个具体的垃圾回收咱们说呃,主要呢,一个是针对于咱们的,呃主要其实垃圾回收针对的都是这个堆空间了啊,堆空间里边呢,我们重点的两个区域,一个呢叫新生贷啊,或者也说也叫做年轻贷啊,另外一个呢,叫做老年贷啊,这个永久贷呢,我们名义上呢是归我们堆空间,但实际上呢,在具体落地啊,就是我们说的方法区的一个实现了啊,这个我们暂时不管,那针对于这个新生代和老年代来讲。
04:17
他们呢,在进行垃圾回收的时候呢,都会涉及到HW,那如果在新生态发生我们称作叫mini jc,那由于这个生态呢,这个内存通常都比较小,所以它的暂停时间呢,一般也都不会太长,都在合理的范围之内,但是如果呢,发生在咱们的老年代啊,我们启动的叫minor j c,或者叫for g c,这个时候呢,我们这个工作的线程如果被暂停呢,这个时间呢就会稍微的长一些,尤其呢是哎内存空间越大,执行for这些的时间呢就会越久,哎相对的工作线程被暂停的时间呢,也就会越长,诶这句话呢,大家关注一下。啊,这里提到一个内存空间的问题,因为呢,我们上面提到这个叫神豆JC,他这块提到了,说这个垃圾收集器的暂停时间就是我们所谓的HW,它跟堆的大小是无关的,那就意味着呢,无论我们将堆设置成200兆还是200个GB啊,它的暂停时间呢,都基本上是一致的啊,只是取决于我们实际堆的这个大小和工作的一个负载情况了,跟我们这个设置的堆的空间的大小是没有关系的。
05:22
啊,那他怎么做到的呢?咱们一会儿说啊,诶大家先明确第一个叫SCW的概念,那么我们要强调的就是任何一个垃圾收集器,任何一个垃圾收集器都避免不了stop the word啊,即使呢,咱们这个在讲新特性之前,主体用的呢,都是G的垃圾回收器,它呢也避免不了stop the word这个情况啊,这个大家需要注意。
我来说两句