Java中通过配置XX:+PrintGCDetails与XX:+PrintGCDateStamps看懂不同收集器的日志

落杰姑娘_7746

落杰姑娘_7746

2026-08-10

205人浏览

原创

开启-xx:+printgcdetails和-xx:+printgcdatestamps是分析java gc行为最基础有效的手段,前者输出堆区变化、耗时等详情,后者添加绝对时间戳便于业务关联;不同收集器(如ps、cms、g1、zgc)日志结构与关键词差异显著,需据此识别类型并结合频率、内存趋势、real/user/sys时间差等指标判断健康状况。

java中通过配置xx:+printgcdetails与xx:+printgcdatestamps看懂不同收集器的日志

Java中开启 -XX:+PrintGCDetails 和 -XX:+PrintGCDateStamps 是分析GC行为最基础也最有效的手段。日志本身不难读,关键在于理解不同垃圾收集器(如Serial、Parallel、CMS、G1、ZGC、Shenandoah)输出结构的差异和核心字段含义。

日志时间戳与基本格式怎么看

-XX:+PrintGCDateStamps 会在每条GC日志前加上绝对时间(如 2024-05-20T14:22:36.123+0800),便于关联业务时间点;-XX:+PrintGCDetails 则展开详细信息,包括堆各区域大小变化、回收耗时、晋升情况等。

典型开头格式为:

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
2024-05-20T14:22:36.123+0800: [GC (Allocation Failure) [PSYoungGen: 123456K->12345K(234567K)] 345678K->234567K(789012K), 0.0456789 secs] [Times: user=0.12 sys=0.01, real=0.05 secs]
  • Allocation Failure 表示触发原因是年轻代空间不足(其他常见原因还有 Metadata GC Threshold、GCLocker Initiated GC、System.gc() 等)
  • PSYoungGen 说明使用的是 Parallel Scavenge 收集器(“PS”即 Parallel Scavenge);若看到 G1 Evacuation Pause 或 ZGC Pause,则对应 G1 或 ZGC
  • 123456K->12345K(234567K) 表示年轻代使用量从 123456K 降到 12345K,总容量 234567K
  • 345678K->234567K(789012K) 是整个堆的变化:回收前总占用 345678K → 回收后 234567K,堆最大容量 789012K
  • real=0.05 secs 是实际耗时(墙钟时间),user/sys 是CPU时间,三者差异大可能意味着GC期间发生停顿或I/O等待

不同收集器日志的关键识别特征

同一参数组合下,各收集器日志结构和术语差异明显,看日志第一眼就应定位收集器类型:

  • Parallel(吞吐量优先):日志中频繁出现 PSYoungGen、ParOldGen、Full GC (Ergonomics);Full GC 通常标记为 [Full GC (System.gc()) 或 (Ergonomics)
  • CMS(已废弃):有明确阶段标识,如 [GC[YG occupancy、[CMS-concurrent-mark-start]、[CMS-concurrent-abortable-preclean];并发阶段日志独立成行,且不带“GC”前缀
  • G1(默认JDK9+):以 G1 Evacuation Pause 开头,区分 young / mixed 暂停;mixed GC 日志会注明 (mixed),并列出被回收的 old region 数量;常见提示如 to-space-exhausted 或 evacuation failure 表示内存压力大
  • ZGC / Shenandoah:日志简洁,强调低延迟特性;ZGC 日志以 ZGC 开头,含 Pause Mark Start、Pause Relocate Start;Shenandoah 则有 Concurrent cycle、Init Mark、Final Mark 等阶段,且多数操作是并发的,暂停极短

重点关注的指标与异常信号

光看格式不够,需结合数值判断健康度:

  • 年轻代回收频率过高(如 1~2 秒一次):可能是 Eden 太小、对象生命周期长、或存在隐式对象创建(如 String.intern、大量临时包装类)
  • 老年代持续增长不下降:说明对象过早晋升或存在内存泄漏;注意 Full GC 后老年代仍居高不下,尤其在 Parallel 或 CMS 下
  • G1 的 Mixed GC 频繁且效果差(如每次只回收少量 old region,但 old gen 仍在涨):可能需调大 -XX:G1MixedGCCountTarget 或降低 -XX:G1HeapWastePercent
  • ZGC/Shenandoah 出现 Allocation Stall 或 Failed to allocate:说明并发标记/转移跟不上分配速度,需检查堆大小或升级硬件
  • real time 远大于 user+sys time:可能受系统资源争抢(如 CPU 被抢占、内存页交换 swap)、或 JVM 陷入 safepoint 竞争

配合其他参数让日志更实用

单靠 PrintGCDetails 有时信息不足,建议组合使用:

  • -Xloggc:/path/to/gc.log 将日志输出到文件(JDK8 及以前)或 -Xlog:gc*:file=/path/to/gc.log:time,tags,level(JDK9+ 统一日志框架)
  • -XX:+PrintGCTimeStamps(已与 DateStamps 冲突,JDK9+ 推荐用 -Xlog 替代)
  • -XX:+PrintGCApplicationStoppedTime 查看 STW 总耗时,辅助定位 GC 外的停顿源
  • -XX:+PrintAdaptiveSizePolicy(Parallel/G1)观察 JVM 自适应调优过程,比如 Survivor 区动态调整、阈值升降
  • JDK11+ 强烈推荐直接使用 -Xlog:gc*,gc+ref*,gc+heap*,gc+ergo*,支持分级、过滤、输出格式控制,比旧参数更灵活可靠

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9997

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7142

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6272

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1084

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

908

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1316

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2629

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19951

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1175

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习