gpt4 book ai didi

Java MemoryMXBean 使用内存大于最大值

转载 作者:行者123 更新时间:2023-11-30 02:53:24 27 4
gpt4 key购买 nike

使用 MemoryMXBean 进行运行时内存分析时,我得到了一个有趣的效果。我想与非堆一起确定堆中的空闲内存。所以我的代码如下所示:

static MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
long fullused = mbean.getHeapMemoryUsage().getUsed() + mbean.getNonHeapMemoryUsage().getUsed();
long fullmax = mbean.getHeapMemoryUsage().getMax() + mbean.getNonHeapMemoryUsage().getMax();
long fullfree = fullmax - fullused;

有时 fullFree 的结果是负值。怎么可能?在计算已用内存后进行一些垃圾收集的竞争条件?在我的日志中我经常看到它,所以我怀疑竞争条件理论。还有其他想法吗?

最佳答案

NonHeap 的最大值可以是 -1。您可以通过 jconsole 为您的应用程序检查这一点。在热点源中,内存使用量的计算是在 jmm_GetMemoryUsage 方法中完成的。如果非堆内存池之一未定义最大大小,则整个非堆中的最大大小将为 -1。元空间池(没有 MaxMetaspaceSize 命令标志)具有未定义的最大大小

关于Java MemoryMXBean 使用内存大于最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37969834/

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