Day361.分析GC日志 -JVM
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day361.分析GC日志 -JVM相关的知识,希望对你有一定的参考价值。
分析GC日志
一、GC日志参数
二、GC日志格式
1、复习:GC分类
1、新生代收集:当Eden区满的时候就会进行新生代收集,所以新生代收集和S0区域和S1区域无关
2、老年代收集和新生代收集的关系:进行老年代收集之前会先进行一次年轻代的垃圾收集,原因如下:一个比较大的对象无法放入新生代,那它自然会往老年代去放,如果老年代也放不下,那会先进行一次新生代的垃圾收集,之后尝试往新生代放,如果还是放不下,才会进行老年代的垃圾收集,之后在往老年代去放,这是一个过程,我来说明一下为什么需要往老年代放,但是放不下,而进行新生代垃圾收集的原因,这是因为新生代垃圾收集比老年代垃圾收集更加简单,这样做可以节省性能
3、进行垃圾收集的时候,堆包含新生代、老年代、元空间/永久代:可以看出Heap后面包含着新生代、老年代、元空间,但是我们设置堆空间大小的时候设置的只是新生代、老年代而已,元空间是分开设置的
哪些情况会触发Full GC:
老年代空间不足、方法区空间不足、显示调用System.gc()、Minior GC进入老年代的数据的平均大小 大于 老年代的可用内存、大对象直接进入老年代,而老年代的可用空间不足
2、不同GC分类的GC细节
可以通过日志,来判断你使用的是什么垃圾回收器
/**
* -XX:+PrintCommandLineFlags
*
* -XX:+UseSerialGC:表明新生代使用Serial GC ,同时老年代使用Serial Old GC
*
* -XX:+UseParNewGC:标明新生代使用ParNew GC
*
* -XX:+UseParallelGC:表明新生代使用Parallel GC
* -XX:+UseParallelOldGC : 表明老年代使用 Parallel Old GC
* 说明:二者可以相互激活
*
* -XX:+UseConcMarkSweepGC:表明老年代使用CMS GC。同时,年轻代会触发对ParNew 的使用
* @author shkstart
* @create 17:19
*/
public class GCUseTest {
public static void main(String[] args) {
ArrayListbyte[]> list = new ArrayList();
while(true){
byte[] arr = new byte[1024 * 10];//10kb
list.add(arr);
// try {
// Thread.sleep(5);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
}
}
- 老年代使用CMS GC
GC设置方法:参数中使用-XX:+UseConcMarkSweepGC
,说明老年代使用CMS GC,同时年轻代也会触发对ParNew的使用,因此添加该参数之后,新生代使用ParNew GC,而老年代使用CMS GC,整体是并发垃圾收集,主打低延迟
打印出来的GC细节:
- 新生代使用Serial GC
GC设置方法:参数中使用-XX:+UseSerialGC,说明新生代使用Serial GC,同时老年代也会触发对Serial Old GC的使用,因此添加该参数之后,新生代使用Serial GC,而老年代使用Serial Old GC,整体是串行垃圾收集
打印出来的GC细节:
DefNew代表新生代使用Serial GC,然后Tenured代表老年代使用Serial Old GC
3、GC日志分类
- MinorGC
- FullGC
4、GC日志结构剖析
- 垃圾收集器
- GC前后情况
- GC时间
5、Minor GC 日志解析
- 2020-11-20T17:19:43.265-0800
- 添加-XX:+PrintGCDateStamps参数
- 0.822:
- 添加-XX:+PrintGCTimeStamps该参数
- 76800K->8449K(294400K)
- 虽然本次是Minor GC,只会进行新生代的垃圾收集,但是也肯定会打印堆中总容量相关信息
6、Full GC 日志解析
- 2020-11-20T17:19:43.794-0800
- 添加-XX:+PrintGCDateStamps参数
- 1.351
- 添加-XX:+PrintGCTimeStamps该参数
三、GC日志分析工具
-Xloggc:<你指定的路径>
-
GCEasy
- gceasy.io
- gceasy.io
-
GCViewer
-
GChisto
- 已经停止维护,有bug
- 已经停止维护,有bug
以上是关于Day361.分析GC日志 -JVM的主要内容,如果未能解决你的问题,请参考以下文章