写点什么

理解 G1 GC 日志

  • 2023-06-25
    北京
  • 本文字数:834 字

    阅读完需:约 3 分钟

G1 GC 在 java 9 中成为了默认的垃圾回收器,G1 GC 得一大特性就是可以在不降低吞吐量得前提下,指定期望的暂停时间(比如可以设定最大的暂停时间)。

随着 G1 GC 正成为默认的垃圾回收器,它的使用率和可见性将会提高。所以为了正确调整和排查 G1 GC 的相关问题,有必要深入理解 G1 GC 的日志格式。

本文将带领读者了解 G1 GC 日志中的细节。

为了更好的理解,我推荐使用一款 GC 日志分析工具:

https://moyucoding.com

环境信息

本文基于 jdk8 的 gc 日志进行解析,jdk9 后启用了新的日志格式,但整体核心内容不变。

jdk : 1.8.0_231

启用 GC 日志

-Xloggc:/home/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps

gc 日志格式解读

当 gc 发生时,gc 格式如下图。



  1. 2023-06-24T10:08:36.225+0800: 312307.342 - GC 事件发生的时间 ,其中 312307.342 表示 jvm 启动以来的毫秒数

  2. [GC pause (G1 Evacution Pause)] - Evacuation Pause 代表 存活对象从一个 region(新生代或者新生代+老年代)复制到另外一个 region。

  3. (young) - 表示这是一个 Young GC 事件

  4. [Parallel Time:74.7ms ,GC Workers : 10 ] - 子阶段的流程和耗时,GC Workers: 10 - 代表 GC 线程数

  5. [Eden: 3518.0M(3518.0M)->0.0B(3588.0M) Survivors: 168.0M->98.0M Heap: 4963.7M(6144.0M)->1448.1M(6144.0M)] - 这一部分代表 heap 的变化: 6.1 Eden: 3518.0M(3518.0M)->0.0B(3588.0M) - 表示 Eden 代的容量为 3518mb,并且 3518mb 全部被占用。 这次 GC 事件之后,年轻代占用的大小增大为 3588M。Eden 代的目标容量已增加到 3588mb。 6.2 Survivors: 168.0M->98.0M - 表示在此 GC 事件之前 Survivor 空间为 168M 。 但在 GC 后 Survivor 大小减小到 98M。 6.3 Heap: 4963.7M(6144.0M)->1448.1M(6144.0M) - 堆容量不变,但使用的内存从 4963.7M 降低为 1448.1M,回收了 3515M 内存.

  6. [Times: user=0.47 sys=0.14, real=0.07 secs] 注意其中的 real 字段,该字段就是本次 gc 的总耗时。

本文是针对 G1 GC 的顶层格式解析,如果想更深入了解 G1 GC 的日志详情,可以使用我们的可视化分析工具来分析: https://moyucoding.com

发布于: 刚刚阅读数: 5
用户头像

还未添加个人签名 2018-05-27 加入

还未添加个人简介

评论

发布
暂无评论
理解 G1 GC 日志_JVM_你头顶的那片星空_InfoQ写作社区