00:01
好,那接着的话呢,咱们来看一下这个日志的一个情况,这个日志的话呢,我们提到了它就分成两类,那一类呢,就叫到mini j c啊,就是mini这些相关的这个日志,另外呢,就叫做这个for j c相关的这个日志啊,这个都很清晰的,能够在这都能看出来,对吧,好,那么。在具体的分析每一项之前呢,我们先大体上进行一个了解,这个MJC的话呢,这呢是把它的其中的这一条记录呢,给它拆成了一个小部分,一个小部分,每一个呢进行了一个描述。啊,每一个进行一个描述,那整体上来看的话呢,它是这么长,但是呢,我们把它也可以拆割成一部分一部分的,每一个一个的part,那一个part里边呢,涉及到的就是比如说你这个JC前内存有多少,这个JC之后呢,内存还剩多少啊然后呢,这个外边还有一个小括号,说明呢,说明一下呢,就是我们这个区域的内存总大小是多少。那关键呢,就是说我们这个区域指的是什么对吧,那就得看你具体的是这个样JC还是这个for jc了啊这呢是整体上我们先了解一下,然后呢,针对这个for j的话呢,由于我们for这些呢,包括了新生代老年代这个还有这个原空间对吧?呃,他们的这个垃圾回收,所以说呢,整个这个记录呢,就会特别的长,这个日志呢,就数据很长,那也是分成一个一个的part,一个一个小部分,你这个这些钱内存是占多少,呃,这些之后内存占多少,那小括号一扩啊,总共这个区域有多少,这个非常的清楚,其实。
01:26
所以说呢,大家如果刚开始你去读这个日志文件的时候呢,你会感觉哇,感觉跟乱码似的,包括呢,像这个内存的地址,你就觉得说哎,一点规律也没有是吧,那其实这块呢,都是有章可循的。那其实我们都是可以进行分析,都可以主动,你像咱们讲这个中片的时候呢,讲资金码你都能读懂了,对吧,能够把这个0101,其实大家呢,手手动的,手工的,咱们哪怕时间多一点,其实也是可以翻译成啊这个源码的,对吧,也相当于我们自己呢,可以拿这个字节码进行一个反编译啊。OK,那这块再回来,那针对这个后这C的这一条日志的话呢,也是一个个part,那关键的我们关心的也是这个,你这个内存区域指的是谁是吧?啊,这个区域之前的区域之后的,哎,这个我们得去了解。
02:11
那这个区域的话呢,有可能是新生代,也可能是老年代,也可能是原空间,也可能是新生代和老年代合一起的啊,所以这个呢,得具体的我们得去看了啊。行,那在具体分析之前呢,咱们再剖析它里边的几个,呃,这个核心的部分啊,然后呢,我们再看一下展开的一个情况,嗯,在这里边的话呢,首先会暴露出来,你当前这个日志文件里边使用的这个for这些也好,MJ也好,这个垃圾回收器是什么。对吧,这个会暴露出来的,那比如说像我们刚才那会儿在演示这个程序的时候,对吧,我们演示这个程序的时候呢,一开始用了一下,是不是叫这个zero这个JC是吧,他用的是它啊这个,诶那那我再先来看看这个吧,咱们刚才呢,是不是又切换成这个CMS了,切换成CMS的时候呢,它是老年代的,所以这能看出来,然后呢,对应的这个新生代呢,它用的是这个penel penel的话呢,你看就是这个呗。所以一看呢,也能看出来对吧?啊这个都比较清楚,好,那如果我们要是把它再换成咱们刚才说这个这个这个C是吧,哎,CTRLC一下。
03:10
嗯,在这个位置在这儿是吧。改一下,按这个加号加上。再跑一下。这时候呢,我们就能看到呢,就是嗯,它这个叫嗯这个叫default是吧,Default new这呢针对的就是新生代用的是这个zero,老年代的话呢,呃,老年代往这看在后边。啊,嗯,在。哎,在这儿呢是吧,看到这样的一个声明的话呢,Turnout这个呢,就是说它用的是theory old啊,就相当于我们通过这个它这个单词呢,就能够分析出来它到底使用的是什么垃圾,什么垃圾回收器,具体的这块你看我都罗列出来了,这first的话呢,它就会显示叫garbage first keep啊就这样的一个情况。好,呃,那在下边的话呢,就提到了,呃,像我们刚才这里边儿有一个叫AOC failure,这个呢,就是由于我们这个新生代空间不足造成的这个分配的一个失败啊,才才会触发的,我们这个叫呃,Mini j c啊。
04:09
嗯,好了,这是它,然后的话呢,我们说分成一个一个part嘛,这个part里边就分成了说你这个是回收之前的,回收之后的,那以及呢,说你这个区域的总大小,那针对我们这个叫样这些的话呢,这个就是我们这个年轻带这个J些之前的这个年轻带的一个大小,这是J些之后呢年轻带的大小,这是我们这个呃,年轻代的一个总大小啊后边这块呢,是我们年轻代和老年代合一起的一个总大小,那这个是呃,合一起的这个总大小,在这个GC之前的一个大小和JC之后的一个大小啊,这是一个具体的说明了,就是单独的一个part,哎,我们看到它的一个情况。呃,然后还涉及到这个JC的一个时间啊,比如我们在这里边去查看的时候,你看后边呢,是不是有这样的三个数值啊。这三个数值对吧,一个呢叫user,这叫用户态的一个用时,这个呢,这个系统内核态的一个用时,还有呢,我们实际消耗的一个时间啊,这呢你看都是0.00,这是因为呢,它其实有一个四舍五入啊,这个里边只不过记录这个时间呢,就非常短,四舍五入完以后呢,就成0.00了啊。
05:11
这个当然这个程序真正执行时间比较长的时候呢,这就有具体的这个数值大小。那这块呢,我们怎么去看呢,这个user。这个优色的话呢,叫做用户态的一个,就是我们自己写的代码,说白了啊,咱自己写的代码呢,执行的时候呢,花费的这个CPU的一个时间啊,就它这里边儿呢,是不包括其他进程和这个阻塞的这个时间的。啊,这个注意一下啊,然后这个SYS这个system啊,就是我们这个系统内核态的一个CPU花费的时间啊,就是这个系统,比如说调用啊,呃,这个系统我们的CU呢,它实际上都不停的在做这个调度,调度啊等待啊等等,这个花费的时间呢,就称为这个叫S这个时间啊,那我们按说的话,这两个时间加一起就应该等于实际的一个用时呗。诶,但是的话呢,我们通常会发现呢,这个real真正的这个时间呢,要小于这俩的时间之和,这个主要原因就是由于我们是不是有多呃多核是吧,多核这个CPU呢,可以去执行啊,包括呢多个线程可以去执行,所以通常我们会看到呢,都是这样,这个实际的这个时间呢,要小于这俩时间啊,理论上来讲的话呢,这俩时间再除以你,呃,这个真正执行的时候那个线程数。
06:15
哎,除以这个线程数的话呢,就能够得到我们真实的这个时间,理论上来讲啊,那实际上的话呢,我们说有多种多样的情况嘛,啊,这个这个不一定了啊,那如果说我们发现呢,你这个real time呢,大于后边这两个和了啊,那我们说有可能会出现这IO的负载非常重,或者CPU呢就不够用了。啊,这个导致我们这样的一个情况出现啊,行这呢,就是大家对里边的具体的某几个小细节呢,先做一个了解,然后的话呢,我们具体来分析一下这个mini jc和这个forc啊,它具体的一个部分。
我来说两句