00:00
好,那刚才啊,咱们更多主要的呢,是给大家讲了一下,咱们要想显示这个JC日志的话呢,我们可以配的这些参数是什么,对吧?那么接下来的话呢,我们来看一下这个,比如说以主流的我们使用这个print j details打印出来这个日志的这个详细信息里边这个信息的一个情况,那刚才呢,其实我们已经讲过一部分了,对吧?那接下来咱们做一个这个补充的一个说明。啊,补充个说明,这个JC啊for jc指明了我们这个垃圾回收这个类型啊这个类型,然后呢,呃,如果接下来如果咱们使用的是这个叫C这些的话,就是这块呢,表明的不是我们我们使用的这个具体垃圾回收器是什么了,具体垃圾回收器的话呢,是不我们得看后边这块啊,对吧?看后边这块啊,那如果说我们使用的是这个串行垃圾回收器的话呢,诶,它会显示的名字呢,全称叫default new generation。啊,如果显示的话呢,叫做呃这样的一个标识。这样表示咱们现在就不给大家一一去演示了,那如果咱们使用的是这个parallel的话呢,咱们显示的是它刚才呢,是不是咱们也看到了,呃,因为这个parallel呢,是针对于这个新生代的一个垃圾回收,所以呢就是PS一样。
01:09
样针就是generation的意思啊,那如果呢,你要使用的是这个panel的话呢,这块呢,就会显示的是这个信息了。那你要使用这个C的话呢,就是这个信息,那这针对的是不是都是我们说的这叫新生代是吧?OK,那老年代的话呢,跟这个新生代呢,是一样的道理。啊是一样的道理,那你这块呢,就是这个old了,那这个呢,我们老年代没有它,那这块呢,就是哎,POLD是吧,刚才我们这块不也看到了吗?啊拍O的啊,针对就我们这个powerly o的这样的一个垃圾回收器行就是通过这个呢,日志文件,我们能看到你使用的这垃圾回收器具体是什么,那如果我们使用的是这个g first垃圾回收器的话呢,就会显示叫GA壁值first hi,诶刚才我们是不是显示那个G9的时候呢,也看到了这样一个信息是吧?OK啊好,这呢是我们说的这个,呃,补充的这个信息,然后呢,刚才也提到这个,呃,Alloc failure。
02:01
嗯,就是我们呢,一开始在分配的时候呢,空间不足了,出现了一个failure,就是我们引起失败的一个原因是什么,然后针对我们这个新生代的话呢,这个这个这个还有这个这个这个是什么意思,这块呢,也先简单介绍一下,这个指明的就是我们这个新生代当中,这个垃圾回收之前的一个空间大小,这是回收之后的大小,这是我们这个,呃,新生代的一个总大小。哎,新生代的一个总大小,那括号之外的话呢,这个呢,指的是我们这个堆空间的一个之前的大小,之后的大小和这个堆空间的一个总大小。啊这样子,然后在我们这个后边的话呢,通常是不是还有对应的这个时间是吧?诶通常还会对应这个时间,这个时间的话呢,就指明我们这个,呃,这个用户呢,所使用这个CPU呢,整个花费的这个时间,这呢是系统呢,呃,一个时间片啊,系统呢这个等待啊,停顿啊,这样的一个时间,然后后边这个real呢,就是我们真正的执行这个垃圾回收所花的这个时间。嗯,大家可能听的有点晕乎是吧,尤其是我们第一个和第三个参数呢,大家可能不容易区分啊,说到底我们这个垃圾回收花了多长时间呢,主要大家看这个数。
03:02
啊说这个呢,也是二级回周呢,CPU所占用的时间,那这个数为什么通常有的时候会大一点呢?因为咱们有可能是不是一个多线程的对吧,多线程的话呢,它会考虑把这个时间跟这个时间加一起了。啊,那真正的时间呢,我们其实就看了一个比较长一点的一个时间就行是吧,哎,就我们所谓的这个real的时间啊,行这呢是我们说的这个参数里边关于这个时间这块的说明。这呢是关于我们这个堆空间的最终的一个占用的一个情况的一个说明。哎,占用的一个情况的说明,诶等一下呢,咱们给大家再举一个代码的一个例子,咱们去说啊,然后接下来咱们先来看这两个图,这两个图的话呢,实际上就是来,诶把上边的我们这个事儿呢,给做了一个详细的一个分析,那这两个图的话呢,这是呃比较有代表性的,所以我呢就直接呢,呃,咱们就在这个图上来看。啊,就是这一条信息,就类似于我们上边里边的这样一条信息,然后还有一个呢,针对于我们这个叫forc的啊,就是下边这条信息,OK啊,我们就直接在这来看了,这两个图呢,在这看大家可能会觉得比较小哈,我这块呢,直接把它存到咱们这个桌面上啊,放到这个对应的两个图片。
04:09
嗯,桌面上看这个图片二啊,行保存一下。行,咱们直接就在这个桌面上来看啊,这个可能就更方便一些啊。行,那我们首先来来看这个啊,针对我们直接这个JC,那我们在这个图当中呢,啊,这个整个呢,这条信息呢,就长这个样子,然后的话呢,这块指明的就是我们新生代使用的是parallel啊这个GC对吧,这个不多说了,然后这个呢,指明的就是我们这个新生代啊垃圾回收,其实其实就这个数呗,新生代这个垃圾回收之前的我们一个新生代的一个内存的占用情况,然后你这个GC之后呢,你看看你这时候呢,占用的一个情况啊,显然这个比例就比较低了,然后再后边这个呢,是我们这个新生代的它的一个总大小。你看这个数的话呢,通常啊,通常这个数呢,比这个数是要稍微大一些的。就是一般呢,我们回收的时候呢,不是完全的说已经满了是吧,是你呢,比如说可能已经占了99%了,剩下的那个对象呢,是1%不够咱们才回收的,所以呢,诶你总大小呢,是这个数衡量的,已经占用的这个99%的这个呢,是这个数来衡量的。
05:13
OK,诶,然后后边这块呢,显示的是咱们这个这个堆空间的一个啊,之前的就是垃圾回收之前的占用和垃圾回收之后的一个占用。啊,然后堆空间的一个总大小。对吧,诶对空的一个总大小行,比如我们看一下当前咱们这个程序的话呢,嗯,咱们是在这在这儿,在这儿是不是就在这设置的。这个数的话呢,你看跟我们这个60G你除一下啊,基本上就是吻合的啊,基本上就是吻合的,就这样个数,OK行,真的是我们说的这个这个参数,然后后边这块呢,就我们垃圾回收呢,所花费的这个时间,对吧?哎,然后这三个参数呢,刚才已经介绍过了。行这块呢,介绍完以后呢,大家把这个事儿呢,得记一下哈,把这个事儿得记一下,回头呢,你再看这个日志的时候呢,就会比较清晰。嗯,那接着的话呢,我们看一下这个叫for GC for这C这块呢,因为涉及到这个新生代和老年代的一个呃回收了,所以这块这个信息量呢,它就会更丰富一些啊,就会更丰一些,好,我们还是来这块看啊,嗯,这块的话呢,我们新生代呢,使用的还是这个parallel j c,老年代呢使用这个parallel old的JC啊比较清晰,这呢是新生代之前的一个占用,哎,这个垃圾回收之完的新代呢已经空了,然后这呢是我们这个,诶这个新生代的一个总大小。
06:25
对吧,呃,新生代的一个总大小,OK,嗯,然后这个呢,是我们这个老年代,老年代呢之前的这个嗯,空间占用的是零,然后呢,这个GC之后呢,我们有一些数据,从新生代呢,就这个把它呢移到我们这个老年代了啊这时候呢,这个老年代呢,目前的一个占用的一个比例,这呢是我们这个老年代呢它的一个总大小。对吧,还有咱们这个老年代的这个总大小啊,然后再往后边的这个参数的话呢,是我们这个堆空间啊,堆空间就整个这个新生代老年代加一起啊,这个堆空间的一个占用大小,实际上你看这个数跟这个数呢,加一起是不是就是3408就这个数是吧?啊就它啊,然后呢,这个诶这个垃圾回收之后呢,我们这个堆空间的一个总大小,这个数呢,是不是就是我们这个数和这个数呢,加一起啊哎,加一起之后呢,这不就是这个数吗。
07:10
嗯,再把这个清掉啊,然后这个时候呢,就是我们这个堆空间的一个总大小。看它就是咱们这个堆空间的一个总大小了,没问题,那对应我们这块的一个参数的话呢,看我们这一个,看下边关于这个叫诶for c看这都行,对空间应该在总大小,那在这是不是还是这么多呀。OK,没问题,然后在后面呢,咱们针对于这个JDK8的话呢,叫做Meta space,诶这块呢,显示的是,诶用的是JDK7啊叫pro space,呃这个呢,就是你这个,呃在这儿呢,叫永久贷了,这个永久贷呢,这个在GT之前的一个占用情况,这个呢是你这个GT之后的一个占用情况,真的是你这个永久带的一个总大小。啊,真的是垃圾回收花的这个时间,然后切换到我们这个GD8中呢,也是同样的道理,这呢,你是麦达space之前那个大小,这个垃圾回收之后的一个大小,这的是你这个麦达spacece的一个总大小,哎,这个一个事件。
08:01
行,那这块呢,咱们就相当于是啊,把这个参数啊,前面这块呢,因为涉及到是我们刚才看到的是,哎,这些参数啊,这些参数呢,如果没有特殊场景需要的话呢,你可以不要它。啊,如果你要是需要呢,查看一下具体的执行的时间啊,这个你就带上它。啊,带上它啊,如果大家回头用一些这个日志分析工具的话呢,你可以考虑把它们都加上啊,现在呢,咱们要是直接看的话呢,咱就不加那个日期了啊,这块直接运行一下。啊,就把前面我刚才看到那个呢,就给它去掉了,诶那么整个呢,这个不管是只显示新生代的也好,还是显示显示这个新生代和老年代的共同的垃圾回收也好,这个参数呢,诶大家需要掌握啊,需要掌握,因为这呢是你看这个日志呢,比较基本的啊,你要能够先直接的能够读懂它这里边儿的这些参数信息。OK啊,这个我们先说清楚,然后的话呢,咱们给大家举个例子啊,通过这个例子呢,哎,再带着大家呢,去读一下我们这里边这个堆空间的一个情况啊,堆空间的一个情况。
我来说两句