(八)Java查询垃圾收集器日志

在JDK 9以前,HotSpot并没 有提供统一的日志处理框架,虚拟机各个功能模块的日志开关分布在不同的参数上,本篇文章结合着【深入理解Java虚拟机】一书当中整理了本篇博客。主要记录参数相关。

到了JDK 9,这种混乱不堪的局面 才终于消失,HotSpot所有功能的日志都收归到了“-Xlog”参数上。

一、查看GC日志相关

1、查看GC基本信息

JDK 9之前使用-XX:+PrintGC
JDK 9后使用-Xlog:gc
在这里插入图片描述
打印出来的日志会发现感觉很乱。这就是jdk8默认收集器打印的日志。
在这里插入图片描述
再看使用jdk8切换G1收集器打印出来的日志。

切换G1收集器: -XX:+UseG1GC

在这里插入图片描述

2、查看GC详细信息

JDK 9之前使用-XX:+PrintGCDetails
JDK 9之后使用-X-log:gc*, 用通配符*将GC标签下所有细分过程都打印出来。

下面是通过JDK8默认虚拟机打印出来的,在内存满了要GC的时候打印的。
在这里插入图片描述

3、查看GC前后的堆、方法区可用容量变化

JDK 9之前使用-XX:+PrintHeapAtGC
JDK 9之 后使用-Xlog:gc+heap=debug

总的来说这个命令还是挺好用的,很直观的可以看出年轻代和老年代回收了多少垃圾。
在这里插入图片描述

4、查看GC过程中用户线程并发时间以及停顿的时间

JDK 9之前使用
-XX:+PrintGCApplicationConcurrentTime以及
-XX:+PrintGCApplicationStoppedTime
JDK 9之后使用-Xlog:safepoint

通过-XX:+PrintGCApplicationStoppedTime可以查看停顿时间,会发现停顿的时间非常短,根本无感知。
在这里插入图片描述

5、查看收集器Ergonomics机制

Ergonomics机制:(自动设置堆空间各分代区域大小、收集目标等内容,从Parallel收 集器开始支持)自动调节的相关信息。
JDK 9之前使用-XX:+PrintAdaptiveSizePolicy
JDK 9之后 使用-Xlog:gc+ergo*=trace

在这里插入图片描述

6、新生代GC时,打印出幸存区中对象的年龄分布

JDK 9前使用-XX:+PrintTenuringDistribution
JDK 9之后使用-Xlog:gc+age=trace

作用:让开发者知道在自己的系统中对象晋升到老年代到底经过了几次GC,然后就可以根据年龄情况调整-XX:MaxTenuringThreshold参数或者调整其他参数让对象晋升到老年代的年龄阈值尽量达到开发者自己设置的理想阈值。

  • -XX:MaxTenuringThreshold:该参数用于控制对象经过GC多少次仍然存活后晋升到老年代的最大阈值,参数最大可配置为15,即对象最多经过15次GC后仍然存活就会晋升到老年代

使用【-XX:+PrintTenuringDistribution】参数后,GC的信息如下:
在这里插入图片描述
以上信息表明,此次经过6次GC,新生代对象晋升到老年代,而最大允许的年龄阈值为15。

7、其他的

在JDK 9中被废弃的日志相关参数及它们在JDK 9后使用-Xlog的代替配置形式

在这里插入图片描述
在这里插入图片描述

二、垃圾收集器参数总结

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43888891/article/details/124303841