gpt4 book ai didi

java - 通过 getMemoryMXBean() 和 jvisualvm 获得的内存使用量之间存在差异吗?

转载 作者:行者123 更新时间:2023-12-04 05:10:10 24 4
gpt4 key购买 nike

尝试通过以下代码监控我自己程序的内存使用情况时

public static String heapMemUsage() 
{
long used = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();
long max = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax();
return ""+used+" of "+max+" ("+ used/(double)max*100.0 + "%)";
}

我得到的结果与通过 jvisualvm 看到的结果略有不同(我的程序中的 17 588 616 与 jvisualvm 中的 18 639 640)。我知道这没什么大不了的,但它确实让我思考。

这个事实有什么解释吗?

如果可能的话,我想使用编码版本,但如果它的结果​​在某种程度上有偏差,在某种程度上更可信,我将不得不坚持使用 jvisualvm。

谢谢

最佳答案

VisualVM 确实使用相同的方法来获取所需的值,让我们检查 MonitoredDataImpl.java :

MonitoredDataImpl(Jvm vm,JmxSupport jmxSupport,JvmMXBeans jmxModel) {
//...
MemoryUsage mem = jmxModel.getMemoryMXBean().getHeapMemoryUsage();
MemoryPoolMXBean permBean = jmxSupport.getPermGenPool();
//...
genCapacity = new long[2];
genUsed = new long[2];
genMaxCapacity = new long[2];
genCapacity[0] = mem.getCommitted();
genUsed[0] = mem.getUsed();

genMaxCapacity[0] = mem.getMax();

if (permBean != null) {
MemoryUsage perm = permBean.getUsage();
genCapacity[1] = perm.getCommitted();
genUsed[1] = perm.getUsed();
genMaxCapacity[1] = perm.getMax();
}
}

所以无论如何使用你的方法是安全的。请发布有关 JVM 版本等的其他信息以跟踪此问题。

关于java - 通过 getMemoryMXBean() 和 jvisualvm 获得的内存使用量之间存在差异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14989476/

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