-XX:+PrintGCDetails 是 JVM 参数,用于输出 GC 详细信息但不触发回收;需配合时间戳或日志文件参数使用,Java 9+ 应改用 -Xlog 统一日志框架。

在 Java 中,-XX:+PrintGCDetails 是一个 JVM 启动参数,用于输出每次垃圾回收(GC)的详细信息,包括回收前后的堆内存分布、各代大小变化、耗时、使用算法等。它本身不触发 GC,只增强日志内容;需配合 -XX:+PrintGCTimeStamps 或 -Xloggc:(Java 9+)才能获得可读性强、带时间戳或独立文件的日志。
启用 PrintGCDetails 的基本写法
在启动 Java 应用时添加如下 JVM 参数:
-
-XX:+PrintGCDetails:开启详细 GC 日志 -
-XX:+PrintGCTimeStamps:打印 GC 发生的相对时间(从 JVM 启动开始的秒数) -
-Xloggc:gc.log(Java 8 及以前):将日志输出到指定文件(推荐,避免刷屏) - Java 9+ 推荐改用统一日志框架:
-Xlog:gc*:gc.log:time,tags,level
典型 GC 日志片段解读(Java 8,Parallel GC)
例如一行输出:
-
PSYoungGen表示年轻代使用 Parallel Scavenge 收集器 -
12288K->1024K(13312K):回收前年轻代已用 12288KB,回收后剩 1024KB,总容量 13312KB -
12288K->1024K(61440K):整个堆的变化(含老年代),总堆容量 61440KB -
0.0045678 secs:本次 GC 持续时间(real time)
Java 9+ 的替代方式(推荐)
Java 9 引入了统一日志系统(JEP 271),-XX:+PrintGCDetails 已被标记为废弃,应改用 -Xlog:
立即学习“Java免费学习笔记(深入)”;
- 输出到控制台:
-Xlog:gc*:stdout:time,uptime,level,tags - 输出到文件并滚动:
-Xlog:gc*:gc.log:time,tags:filecount=5,filesize=10M - 只关注关键指标(如停顿时间和原因):
-Xlog:gc+pause,gc+heap=debug
配合其他参数提升分析效率
单靠 PrintGCDetails 日志还不够直观,建议补充:


















