Mark Sweep 和 Scavenge 计数如何工作?

How do Mark Sweep and Scavenge counts work?

我有 groovy 每分钟挖掘 tomcat 并将结果转储到数据库中的代码,如下所示:

while(true){
def values = []
// some code omitted
//java.lang:type=GarbageCollector PS Scavenge, PS MarkSweep
def markSweep = new GroovyMBean(server,     'java.lang:type=GarbageCollector,name=PS MarkSweep') 
values.push(markSweep.CollectionCount)
values.push(markSweep.CollectionTime) //in ms

def scavenge = new GroovyMBean(server, 'java.lang:type=GarbageCollector,name=PS Scavenge') 
values.push(scavenge.CollectionCount)
values.push(scavenge.CollectionTime) //in ms
}

然后我今天随时间监控了输出,这就是我所看到的:

GC Monitoring

可以看到计数和次数单调递增。我期望计数会根据内存中的对象数量上下波动。这些 MBean 的时间和计数是否累积?

是的,它们是单调的计数器。如果您想跟踪速率,请存储读数的增量和先验值。