-XX:+PrintGCDetails用于输出详细GC日志,包含各内存区(PSYoungGen、ParOldGen、Metaspace等)GC前后已用/总容量、耗时及触发原因;需配合-Xloggc或-Xlog、时间戳等参数提升可诊断性。

-XX:+PrintGCDetails 是 JVM 中用于输出详细垃圾回收日志的关键参数,它不仅记录 GC 发生的时间、类型和耗时,还会展示每次 GC 前后各内存区域(如 Eden、Survivor、Old、Metaspace 等)的占用大小、已用容量和总容量变化,是分析内存分配行为与回收效果的重要依据。
开启详细 GC 日志的基本配置
在启动 Java 应用时添加以下 JVM 参数即可启用:
- -XX:+PrintGCDetails:输出 GC 事件的详细内存快照(含各代使用量、GC 前后对比)
- -Xloggc:gc.log(JDK 8)或 -Xlog:gc*:gc.log(JDK 9+):将日志重定向到文件,避免混入控制台输出
- -XX:+PrintGCDateStamps 或 -XX:+PrintGCTimeStamps:添加时间戳便于定位问题时段
日志中关键内存字段解读
典型输出形如:
[GC (Allocation Failure) [PSYoungGen: 123456K->12345K(234567K)] 234567K->134567K(567890K), 0.0234567 secs]
AI 舌诊面诊问诊医疗系统 + 诊疗商城系统源码是一套结合 AI 辅助诊断与商品转化的健康类程序,基于浩创云、ThinkPHP(PHP)开发,支持微信服务号与 H5 端,适合做中医舌诊面诊问答、健康建议推送以及配套诊疗商品的运营。
- PSYoungGen:年轻代(此处为 Parallel Scavenge 收集器),冒号后 123456K->12345K 表示 GC 前后已用空间,(234567K) 是该代总容量
- 中间的 234567K->134567K 是整个堆的已用/总容量变化
- 若出现 [Full GC,说明触发了老年代回收,通常伴随 Metaspace、Compressed Class Space 等区域的统计行
配合其他参数提升诊断价值
单靠 PrintGCDetails 往往不够,建议组合使用:
- -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps:区分绝对时间和相对时间,方便关联业务日志
- -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M:自动轮转日志,防止单文件过大
- -XX:+PrintAdaptiveSizePolicy(仅限 Parallel GC):查看 JVM 是否动态调整各代大小,辅助判断是否需手动设 -Xmn
注意 JDK 版本差异
JDK 8 与 JDK 9+ 的日志格式和开关方式不同:
- JDK 8 使用 -XX:+PrintGCDetails -Xloggc:gc.log 即可
- JDK 9+ 默认禁用旧参数,需改用统一日志框架:-Xlog:gc*,gc+heap=debug,gc+ref=debug:file=gc.log:time,tags,uptime
- 新版日志更结构化,支持按标签(tags)过滤,例如只看元空间回收:-Xlog:gc+metaspace=debug










