gpt4 book ai didi

java - 如何找到自上次使用 JVM 进行垃圾回收以来耗时?

转载 作者:行者123 更新时间:2023-11-30 10:04:57 25 4
gpt4 key购买 nike

这主要是关于 Oracle Java 8 JVM。假设我无权访问日志。 Java 未在详细模式下运行,并且未记录 stdin/stderr。

运行中的 JVM 中是否有任何地方保存最后一次 GC 事件的时间戳?或者任何其他可能表明上次 GC 事件发生时间的信息?

我只想知道上一次GC事件发生在多久之前。区分不同类型的 GC 事件的加分项。

最佳答案

当您对适用于 Oracle 的 Java 8 JVM 的解决方案感到满意并且可能适用于其他解决方案时,您可以使用 the GarbageCollectorMXBean platform extension .我链接到 JDK 11 文档,因为此类未包含在 JDK 8 的文档中,但存在此类型并且以下解决方案有效。

final RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();
long base = rt.getStartTime();

for(GarbageCollectorMXBean gc: ManagementFactory.getGarbageCollectorMXBeans()) {
if(gc instanceof com.sun.management.GarbageCollectorMXBean) {
com.sun.management.GcInfo info =
((com.sun.management.GarbageCollectorMXBean)gc).getLastGcInfo();

if(info != null) {
System.out.printf("%-15s%tF %2$tT.%2$tL (%6dms ago)%n",
gc.getName(), base + info.getStartTime(), rt.getUptime()-info.getStartTime());
}
}
}

当我前置

System.gc();
System.out.println(System.getProperty("java.version"));

对于简单的运行,我得到了

1.8.0_131
PS Scavenge 2019-04-09 11:58:25.808 ( 50ms ago)
PS MarkSweep 2019-04-09 11:58:25.809 ( 74ms ago)

此信息也可以远程查询,另见Ways to Access MXBeans .如果 JVM 已经运行管理代理或者可以通过 Attach API 访问(通常意味着在同一台计算机上运行),它就会工作,因此可以稍后启动管理代理。这些选项也是 VisualVM 等工具使用的。

关于java - 如何找到自上次使用 JVM 进行垃圾回收以来耗时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55582753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com