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

本文介绍了JDK9后HotSpot虚拟机如何统一日志管理,详细讲解了GC日志的调整,包括查看基本信息、详细信息、堆区变化、并发时间等,并总结了垃圾收集器参数的变化。还展示了如何通过-Xlog配置查看新生代对象年龄分布和Ergonomics机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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的代替配置形式

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

二、垃圾收集器参数总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值