00:00
好,那下面的话呢,咱们针对于哎,刚才提到的这叫mini j c,还有这个叫for j c,哎,咱们把这个图呢,具体的给大展开了,咱们看看这一部分一部分的这个情况,哎包括呢,每一部分里边可能还有一些拓展的一些情况呢,诶我们呢,给大家解释一下啊,首先的话呢,咱们来看一下这个叫media jc啊这个呢,我就针对的,呃,之前呢,这时候做的一个日志分析里边我挑出来了其中的一条,这叫MJC的一个日志数据,哎,针对这个数据呢,诶把它呢给肢解了啊,一部分一部分的啊好,那我们这块呢,把它打开啊,猛一看的话有点吓人啊嗯,一部分一部分一部分呢,我们就给大家来说。首先的话呢,我们看到这样的一个数据,这个数据呢,记录的是年月日十分秒啊,包括还有这个时区,相当于就是我们打印这个日日呢,哎,对应的这个时间是多少啊,就是这样一个时间啊呃,那这个时间的话呢,我们要想它出现啊,像我们刚才这个前一章的时候呢,打印这个数据的,打印这个参数的时候呢,其实都没有对吧,怎么就有了呢?咱们是不是使用了一个叫print j c date stams啊,使用这样的一个指令,再配上我们说的print j c details,就会出现这样的具体的时间戳年月日十分秒,对吧。
01:11
哎,就是要想出现这个的话呢,你加上这两个参数就可以了,好再回过来。那下边这块呢,还有一个呢,具体的这个时间,这个时间的话呢,就是JC发生的时候呢,虚拟机启动啊,到现在呢,经历了这个时间八秒多,就这个出现这样的一个JC了,那这个时间的话呢,咱们使用的是上边这个就print j c time stas出现的,对吧?那也就是说呢,我们这个参数和这个参数它俩呢,是可以同时都写上的,因为呢不矛盾对吧,就是你呢,呈现的是这个具体的一个时间,我这呢是一个经历的这个时间,所以呢,这个参数这个参数合一起再加上一个他打印的。诶,我这里边儿给的这样的一条这个日志的信息。嗯,打印的这条日志信息啊,注意一下好,那接着往下说,嗯,接下来的话呢,这个GC啊OC啊failure这个呢,就是我们发生这个GC行为了,就光看这个JC的话呢,严格上来讲,其实应该说看不出来到底是发生的什么JC对吧?当然了,我们这个for GC的话呢,其实它会写一个那个那个那个for GC了,是吧。
02:11
呃,这个JC里边呢,这个指明的是它出现这个原因啊,包括这个for GC的话呢,也类似,这里边指出叫分配的一个failure,这个分配的failure呢,主要指的就是我们这个新生代当中没有足够的这个区域啊,去存放你要分配的这个对象了,所以呢,导致出现了这样的一个JC啊,这是指明了一些原因,然后再往后的话呢,就是我们刚才说这个part基本的部分,这个part部分里边呢,首先呢,第一个啊样这个generation一个呢,是我们看到它针对的这个区域,就我们说的这个叫新生带是吧,那另外的这个呢,就我们说的这个parallel scaage啊,我们使用的这个并行的垃圾回收器啊,那这呢,我又放过来了,就是除了呢,你是用这个并行垃圾回收器之外,如果是其他这个垃圾回收器的话呢,它显示的是什么名字啊,那会儿呢,我们也说了一下这个事儿,对吧?啊,这就过了啊。
03:00
呃,然后的话呢,后边这个呃,内存的大小,这里边儿是76800KB,然后到838433KB,这个呢,是我们对应的这个区域,这个执行垃圾回收之前的一个大小,到执行垃圾回收之后的一个大小,那我们现在是一个样区,那自然而然的就是我们当前这个这个新生代啊,回收之前的一个大小啊,之后的一个大小,然后这个描述的就是它的一个总大小,注意。这个所谓的这个总大小是什么意思呢?来我们看一下,由于呢是新生代,咱们默认的话呢,这个呃叫什么伊甸园区跟这个SURVIVOR2个区呢,比例是8:1:1对吧,那我们这里边这个括号里边这个大小,注意是咱们整个新生代空间的一个9/10啊,延G呢,就是它有一个依甸园区要表示上啊,同时呢,你这个我们说谁空谁是to啊,当然我们讲这样一个口诀的时候呢,它survival区呢,一定会有一个是空白的。那因为我们用的是这个复制算法嘛,对吧。所以呢,这里边它只会记录呢,就是9/10这样的一个区域,就是这个数呢,加一起,并不是我们真实的这个新生带的一个大小啊,哎,相信只是它的一个9/10的一个区域,行,这个呢,大家注意一下,那如果要是老年代的话呢,因为没有这种,不是用这个复制算法了,所以呢,它就是全部的一个大小了。
04:13
好,那不管是这个这个这个叫什么mini也好,还是这个for也好,他们在最后的时候呢,都会再去打印一下你当前这个堆空间的一个变化情况,那这呢,自然而然的就是我们这个堆空间这个执行JC之前的一个大小和执行GC之后的一个大小,这个呢,就是我们这个堆空间的一个总大小,当然这个大小的话呢,是新生代和老年代合一起的,老年代呢就是你本身的老年代大小,新生代的话呢,还是刚才那个意思,9/10啊这个区域。所以它是小于初始化的这个内存大小的啊,这个大家一定要小心,那如果有编是故意问到你说,诶我们这个数据呢,发现比这个初始化这个内存大小小,为什么呢。你得会解释,因为呢,它只是相当于新生代的9/10啊,这个大家注意一下啊,啊这个的话呢,有同学会想说,诶我这是mini jc mini jc不是只要只只是关于这个新生态吗?怎么这块还把这个堆空间这个也打印了呢,哎,刚才我其实已经说过了,就是不管。
05:09
再看一眼啊。不管呢,咱们是这个minic还是这个forc,哎,他们都会在你执行完这个,这是你这个呃mini了,这是你这个实际的信态的一个变化情况,他在最后这个位置呢,它会显示一下你当前这个堆的一个变化情况。啊,对的,一个总大小,这个总呢,其实加个引号是吧,9/10的这个新生代啊,哎,它会打印一下,然后对于我们这个for这些的话呢,哎,它前面呢,可能会涉及到这个新生代的,这个老年代的啊,甚至还有这个圆空间的啊等等打完之后呢,它最后啊这块稍微有点小啊这那是我们这个叫永久带了是吧,它在最后的时候呢,这个位置。这个永久在之前啊,在这个位置的话呢,你看它是不是也一定会打印一下咱们这个堆空间的一个,呃,垃圾回收之前和回收之后的一个大小是吧,也就是这个呢,是它是一定会打印的啊,哎,这个大家稍微注意一下。行,这个我们再拉回来。
06:02
嗯,接着说,嗯,这个呢,就是我们说的这个堆空间的一个情况啊,一个变化情况,在后边呢,就是我们整个这个JC它所花费的这个时间单位呢,是second是秒啊,你看这个这个小数位就就很多了,是吧?啊比较精确啊,然后再最后呢,就是我们说这个具体的你涉及到这个用户态内核,还有这个实际花费这个时间啊这样的一个情况。啊,这个呢,就是我们说的刚才也提到这样一个概念了,好这呢就是关于我们这个叫mini j c啊这呢一个解释啊,相当于呢,这个说清楚之后呢,大家你再看到任何的这个关于mini j c的话呢,呃,你就直接往我们刚才这个表格里边去套就行。啊,这些套的话呢,完全都可以套的,套的出来,嗯,顶多呢,就是你这个可能数据量更小,比如说我没有用这个data stems,那你这个信息呢,就没有呗,对吧,后边这块呢,肯定是都包含的啊OK,行,这呢是我们说的这叫MJC的一个日志的解析。
我来说两句