有没有办法使用JConsole接口计算Java程序的给定时隙的垃圾收集吞吐量?例如,我想比较一个程序中的不同功能以及GC吞吐量如何在这些功能之间变化。
我已经阅读了Oracle JConsole文档,我能找到的最接近的指标是GC Time,它是:
“GC时间:在垃圾收集上花费的累计时间和调用总数。它可能有多行,每行代表Java VM中使用的一个垃圾收集器算法。”
来源:https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html
但是这并没有指定开始累积的开始时间。如果我能确定何时开始,我可以自己计算吞吐量。
或者是否还有其他方法来计算JConsole的吞吐量?
答案 0 :(得分:0)
我通常使用两个:
同时,因为不同的工具可能会显示不同的结果。
对于您的问题答案 - 从应用程序开始启用GC日志。因此,当您看到GC时间时,您可以获得吞吐量=总和(GC时间)/总时间。
启用GC日志,您的意思是使用-verbose:gc或-Xloggc:?
不,我的意思是内部counters。澄清是很好的。
另外:你知道GC时间代表什么:从申请开始的时间,或每个给定时间段的时间?
从申请开始。使用jstat查看GC时间的另一种方法。我们将拥有这个计划:
public class JStatTest {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; ++i) {
System.gc();
System.out.println("Wait...");
Thread.sleep(1000);
}
Thread.sleep(100_000);
}
}
我们可以连接jstat(从开始)和jconsole(接近结束,循环后),看看:
未启用GC详细日志记录。
查看总时间: