最详细G1垃圾回收器日志解读

编程入门 行业动态 更新时间:2024-10-28 14:22:36

最详细G1<a href=https://www.elefans.com/category/jswz/34/1770876.html style=垃圾回收器日志解读"/>

最详细G1垃圾回收器日志解读

首先,开启gc日志。-XX:+PrintGCDetails

疏散阶段

疏散阶段,主要是将内存中的数据从一些分区复制到其他分区

0.522: [GC pause (young), 0.15877971 secs] # 这次疏散只涉及年轻代,总耗时 0.15877971.如果是混合gc则可能是 [GC pause (mixed), 0.32714353 secs][Parallel Time: 157.1 ms] # 并行疏散,总耗时 157.1 ms[GC Worker Start (ms):  522.1  522.2  522.2  522.2 # 每个疏散线程的开始时间Avg: 522.2, Min: 522.1, Max: 522.2, Diff:   0.1]  # 最大时间,最小时间[Ext Root Scanning (ms):  1.6  1.5  1.6  1.9  # 每个线程扫描根分区的时间Avg:   1.7, Min:   1.5, Max:   1.9, Diff:   0.4][Update RS (ms):  38.7  38.8  50.6  37.3 #更新RS的耗时,线程会把对当前分区引用的变更记录在buffer里,这里就是处理这些bufferAvg:  41.3, Min:  37.3, Max:  50.6, Diff:  13.3][Processed Buffers : 2 2 3 2 # 处理缓冲区的数量Sum: 9, Avg: 2, Min: 2, Max: 3, Diff: 1][Scan RS (ms):  9.9  9.7  0.0  9.7 # 扫描RSAvg:   7.3, Min:   0.0, Max:   9.9, Diff:   9.9][Object Copy (ms):  106.7  106.8  104.6  107.9  # 每个线程复制到CS的内容其他分区Avg: 106.5, Min: 104.6, Max: 107.9, Diff:   3.3][Termination (ms):  0.0  0.0  0.0  0.0Avg:   0.0, Min:   0.0, Max:   0.0, Diff:   0.0][Termination Attempts : 1 4 4 6Sum: 15, Avg: 3, Min: 1, Max: 6, Diff: 5][GC Worker End (ms):  679.1  679.1  679.1  679.1 # 每个gc线程的结束时间Avg: 679.1, Min: 679.1, Max: 679.1, Diff:   0.1][GC Worker (ms):  156.9  157.0  156.9  156.9 # 每个gc worker的总耗时Avg: 156.9, Min: 156.9, Max: 157.0, Diff:   0.1][GC Worker Other (ms):  0.3  0.3  0.3  0.3 Avg:   0.3, Min:   0.3, Max:   0.3, Diff:   0.0][Clear CT:   0.1 ms] # 清理卡表[Other:   1.5 ms][Choose CSet:   0.0 ms][Ref Proc:   0.3 ms][Ref Enq:   0.0 ms][Free CSet:   0.3 ms][Eden: 12M(12M)->0B(10M) Survivors: 0B->2048K Heap: 13M(64M)->9739K(64M)]  # 各个分代的内存变更。eden的容量从12M到10M,内存占用从12M到0.survivors的内存占用从0 到 2048k.堆内存容量从64M到64M,内存占用从13M到9739K[Times: user=0.59 sys=0.02, real=0.16 secs] # 总耗时0.16秒

标记阶段

1.416: [GC pause (young) (initial-mark), 0.62417980 secs] # 标记周期的第一阶段是初始标记,标记从根直接可访问的对象
2.042: [GC concurrent-root-region-scan-start] # 标志根分区,也就是初始标记的对象所在的区域。可以从初始标记的结果中直接获得
2.067: [GC concurrent-root-region-scan-end, 0.0251507] # 根分区标记的结束及耗时。结束发送在下一次yong gc之前,因为下一次gc会改变初始标记的对象所在的分区
2.068: [GC concurrent-mark-start] # 并发标记,并发创建每个分区的卡表,标记外部分区对当前区域某个卡片的引用。
3.198: [GC concurrent-mark-reset-for-overflow] # 这表明全局标记堆栈已满,并且堆栈溢出。并发标记检测到此溢出,必须重置数据结构以再次开始标记。
4.053: [GC concurrent-mark-end, 1.9849672 sec] # 并发标记的结束,耗时
4.055: [GC remark 4.055: [GC ref-proc, 0.0000254 secs], 0.0030184 secs] # 重新标记。STW,在并发标记阶段产生的变更会被写屏障记录下来。这里就是标记这部分对象,速度很快[Times: user=0.00 sys=0.00, real=0.00 secs] # 标记阶段结束 
4.088: [GC cleanup 117M->106M(138M), 0.0015198 secs][Times: user=0.00 sys=0.00, real=0.00 secs] # 回收资源阶段,将空闲的分区收集好,非空闲的区域按回收代价排序。堆内存 138M, 回收前 117M,回收后106M.
4.090: [GC concurrent-cleanup-start] # 并发清理,主要根据停顿目标选择适当数量的分区收集。
4.091: [GC concurrent-cleanup-end, 0.0002721] # 清理结束,耗时。

更多推荐

最详细G1垃圾回收器日志解读

本文发布于:2023-07-03 16:26:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1008927.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:垃圾   详细   日志

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!