问题描述
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 解释了上面文档中没有的一些选项。