Java G1 GC Concurrent Mark日志条目含义及耗时类型咨询
[info ][gc,marking ] GC(132605) Concurrent Mark (728435.456s, 728445.080s) 9624.269ms
问题1解答
- G1垃圾回收器的Concurrent Mark(并发标记)阶段确实是完全并发执行的,整个阶段不会触发全局STW停顿,GC标记线程会和应用业务线程并行运行。
G1完整的标记周期中,只有初始标记(Initial Mark,通常和年轻代GC的STW停顿绑定)、最终标记(Remark,需要短暂STW处理标记剩余的存活对象)两个阶段是停顿阶段,你提到的Concurrent Mark阶段耗时完全不属于应用停顿时间,不会直接阻塞业务请求的正常处理。
问题2解答
- 日志中的
9624.269ms是挂钟时间(Wall Clock Time),也就是从并发标记开始到结束的现实世界流逝时长。
你可以通过日志中括号内的两个时间戳验证:两个数值是JVM启动以来的累计挂钟时间,差值计算为728445.080s - 728435.456s = 9.624024s,和日志记录的9624.269ms完全匹配(误差来自时间戳的小数位精度截断)。如果该数值是CPU时间,因为并发标记会启用多个GC线程并行执行,累加的CPU耗时会远大于挂钟时间,和当前日志数据不符。
内容的提问来源于stack exchange,提问作者Sean McCauliff
相关产品推荐
相关产品推荐

