Java运行时的freeMemory()方法与jconsole输出不匹配

3

我遇到了一个奇怪的问题。我有多个JVM正在运行,我需要获取它们的内存使用情况。当我通过Runtime.getFreeMemory()获取详细信息并将其与jconsole输出进行比较时,存在巨大差异。可能是什么问题?当我使用Runtime.getFreeMemory()

时,我得到了错误的详细信息。
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax() - ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();

可能的问题是什么?有什么建议/评论非常感谢。谢谢。

你看到了什么不一致之处?顺便问一下,你试过VisualVM吗? - Peter Lawrey
抱歉,ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax() - ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed(); 在jconsole中反映,而Runtime.getFreeMemory()则不是。 - AVI
free = total - used 当然可以。你能给我们一些数字吗? - Peter Lawrey
1个回答

0

Runtime.getFreeMemory()会告诉你已经被分配的内存中还剩下多少内存。它等于Runtime.totalMemory()减去当前已使用的内存。而Runtime.maxMemory()则是你指定给JVM可以分配的最大内存(-Xmx)。它可能比Runtime.totalMemory()更大。你可能正在查看jconsole中最大内存和已使用内存之间的差异。为了测试这一点,尝试将(-Xms)设置为与(-Xmx)相同,这将导致JVM在启动时分配最大内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接