00:00
好,那各位同学,那么接下来我们再来说一下另外一个。这几个参数啊,那么。这个重点,那么这三个你要了解,但是工作中一般也不用你去挑好,我们先总说了,以后一个一个的敲,我们下面看看g c details,那么呢,这个参数呢,在原来GVM的讲课当中,杨哥详细给大家讲过,因为这道题目呢,我们会快快的讲哈,但是呢。继续深入,什么意思呢?来,同学们。佳琪。去掉,然后完了以后啊,同学们我们来。直接粘贴这个。那么好,我们一运行,我们大家知道,哎呀。呢,先把它去掉一下哈,我们一运行的时候,我们都知道,只要你加了print GC。DL是不是打印出垃圾回收的一些细节情况啊,那么。现在我们呢,当时我们讲的时候呢,详细讲过一个问题,就说明至少堆告诉我们它是有样区,O区,煤炭SPACE3块构成,还记不记得吧。
01:11
OK,那么下面。我们呢,要干的一件事情呢,是什么呢?假如说我们现在报oom,那么我这么运行一个,它肯定不会产生什么GC回收嘛,就打印出一条hello word,我的内存大概是四个字这么大,那么不会产生那么好,现在我们改造改造程序哈。在这我们呢,XMX比方说只是十兆杠,XMX比方说也是十兆好,那么现在最大是不是十兆那么好,同学们哈,现在呢,杨哥呢就作死那么。定义这个大对象,Bit bit RA by。A等于六。然后多少呢?我们刚才的配置大家再看一眼,我最大最小统计的是只有十兆,那么现在呢,我放件,我呢直接给你配个50兆,那么这个时候相当于说我直接拗了一个大堆象,以后是不是就把这个堆给撑爆了,同学们能不能跟上,那么一撑爆,在分配内存的过程当中,它不得不产生垃圾回收,我们来看看什么。
02:22
这个垃圾回收,它又会产生一些什么样的变化,以及对应的数值,那么来同学们,这个时候我们呢,一看,唰一下,那么OM Java keep space堆空间。挂了。那么现在我们要给大家来解读的是。刚才根本没有GC和负GC。刚才只有下面这一坨正常的情况,对吧,他没有产生过GC,都是打印,一句话没有什么对象,但是现在呢,严格故意使坏,你呢只有十兆,但是呢,我要给你六个50兆的对象,那么他被压了以后慢慢的来分配,那么我们要现在要带着大家学习的是这些东东。
03:04
是什么鬼?这些东东那么呢,又怎么看?好,尤其是前两个非常非常非常的重要,那么好,首先一个是GC,一个是负GC,这块很重要,请同学们打起精神听杨哥讲。那么第一个。输出GC的详细收集,收集日志信息,那么这个GC,那么所谓的详细收集日志信息,就是说你这个GC变化我应该怎么看,你看哈,这有个中括号,然后在这,然后呢。这个里面中括号里面。有一个,然后呢,这个外面又有一个后面是时间,那么user用户的时间,系统的时间,真实的什么指令时间等等,这个好说,关键是这一串你怎么阅读,我们可以看到它产生了一次,你看看是因为什么分配失败,没有空间了,对吧,分不进去,压缩产生了,产生了一次GC,那么你看0.004。
04:03
秒,那么也就是多少。很轻很轻很轻的,0.004秒钟对吧,那么关键就是摘一串是什么。那么G你GC是要在一定园区释放空间,我们讲过嘛,一般GC在新城区,负GC在养老区,对吧?那么这些东东是些什么呢?好,我们来看一眼。来。这个时候很啰嗦。那么首先。这个GC叫GC的类型,我们现在是GC还是负GC?第二个这是什么样GC新生代?回GC前新生代的内存占用,然后也就是说你到这个值了,撑不住了,触发GC了,那么触发了以后,那么干嘛呢?你呢要释放内存,那么大家请看我们这一定会产生GC以后就是什么。
05:00
2048。然后呢,两兆,这是GC前。然后呢,GC号我们用了多少,496,那么大概是多少,是不是1.5兆左右就腾出去了,那么言下之意,这是什么意思啊,大家看。这是什么?GC前新生代内存占用,这是什么?GC号新生代内存占用,而这个是什么?代表新生代总共是。多少好,那么我们要看到它有时候我们在调优,叫分析这个日志和这个垃圾回收的过程前和后,那比方说哈,在这块你看比如说这个33多到40多,那么它的效果就很明显,我们这个思路就是对的,我们才可以倒着这么往下去GC去分析调,我们调U,那么然后。再来看后面呢,有什么没有这个了,对不?这个括号以外的,那么这个呢,是叫什么呢?GC前GM什么东东多内存的占用,然后呢,这是GC号多内存的使用,那么你看明显的是不是变小了,那么后面这个是什么东东,我们的GCGVM堆的总空间啊。
06:09
大小那么来我们呢,都知道。九七二十八。大概是不是就是小十兆,那么言下之意,你的总的磅活量那么大概就是这么多,我们讲过哈九我我们因为它有些误差,那么呢,大概什么?新生区占1/3,养老区占2/3,总的堆内存就是九兆十兆,那么你看2560大概是不是就是1/3嘛,那么所以说前面这个干嘛。就是我们的新生代的总共大小,那么这儿就是新生代的总共大小,而这个呢,就是我们堆的总共大小,一个是新生代的,一个是GM,对的,那么这个箭头像拉姆达表达式那个右箭头一样,就是。前后那么解读了,我们把这个看看就是新生代,你看这个括号以内是新生代吗?
07:03
新生代GC之前是多少?GC之后是多少?那么新生代总的是多少?那么。分别是这的123,那么接下来这一块,那么就是我们的GC之前堆。多少GC之后堆是多少,那么言下之意,这个就是我们的这GC前堆是多少,GC后堆是多少,那么最后这个是堆的总大小,那么这个呢,干嘛就是我们堆的总大小好那么最后是什么?三个时间,那么这三个时间分别就是什么user嘛。对吧,那么这个呢,就是前面这个时间,那么大家在搂一眼,就是GC的耗时时间,那么干嘛,GC用户的时间,系统时间,时际时间,OK,那么这个呢,就是我们的什么动刀。GC垃圾回收的参数的解读那么好,跟刚才差不多,那么同学们负GC呢也这么回事,那么大家看这么一个,这么一个,当然我们都明白负GC大部分时候是不是发生在我们的养老区,好了,那么看看真实的,那么我们把它呢抓过来,那么。
08:18
一样。那么负GC和刚才呢也差不多,那么GC首先第一个GC类型是负GC,那么呢,哪个区样区收集GC前样区是多少?然后GC号样区是多少样区总大小,第二个哪个区O的区,那么干嘛呢?O的区之前是多少,之后又是多少O的取的总大小,然后外面这个就是什么GC前多内存占有,GC后多内存占有,最后是GVM堆的总大小。那么。当然他这块呢是什么,我们的永久带是JAVA7以前的版本,那么当然我们这块干嘛。
09:06
我们呢,可以看到一样,是不是已经换成了我们的圆空间,好那么来圆空间GC前占多少,GC号占多少,总的make space多少,那么来吧,我们可以看GC前GC号总的占多少,好那么。这是什么?我们的消耗时间,OK,最后用户时间,系统时间,实际时间,那么呢,干嘛和前面的GC。差不多负GC,它的分析思路一句话规律就是名称GC前内存占有GC垃圾回收以后,释放了以后剩多少,那么还有该内存区的总大小,那么呢?从这。我们负GC你看一样没有了O的怎么着,你看GC前是683 GC号是666,那基本上干嘛O着虚扛不住了,那么言下之意干嘛,你看这个情况下而言的话。
10:07
负GC没太管用,我们都讲过负GC老年代都扛不住了,是不是他会把我们的oom好,那么所以说读这个列表,那么哪个区GC前是多少,GC号是多少,在哪个大,总共有多少,那么后面这个是堆,GC前堆是多少,GC号堆是多少,总的堆是多少,那么呢,根据。前面的讲解哪个带GC,前后是多少,总是多少,最后三个耗时来决定,来看日志分析你这个性能好不好,那么这个就是我们对print GC这个参数的什么加强和。了解。那么。这块对于我们的print GC参数的深度解析和过程流程分析,请同学们一定要掌握。
我来说两句