如何计算 zgc 结果gc 时间和堆使用情况

问题描述

jstat -gcutil的结果适合分代垃圾回收,但是zgc结果怎么统计呢?

解决方法

afaik,每个 GC 算法都实现了自己的统计信息,这意味着这是一个特定于收集器的输出。是的,ZGC 不是分代的,因此一些统计数据不会出现,这是正常的,但否则它就可以正常工作?

如果我有一个样本:

 public class DeleteMe {

    public static void main(String[] args) {
        for(;;){
            LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(500));
            System.out.println(allocate());
        }
    }

    static int allocate() {
        int [] b = new int[10_000];
        for(int i=0;i<10_000;++i){
            b[i] = i + ThreadLocalRandom.current().nextInt();
        }
        return Arrays.hashCode(b);
    }

}

然后拍摄一些快照:

jstat -gcutil <PID>

我确实看到这样的数字:

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT   
   -      -      -  15.38  76.33  74.80      -        -     -        -    63    0.005    0.005

S0/S1/E 是空白的,因为它们根本不存在(根本没有年轻代)。同样的论点对:YGC/YGCT/FGC/FGCT 成立,只是因为在 ZGC 中没有这样的东西。您可以找到它们的含义 here,for example。还有 this Q&A 解释了上面文档中没有的一些选项。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...