我遇到了一个奇怪的问题。我有多个JVM在运行,我需要获取它们的内存使用细节。当我通过Runtime.getFreeMemory()获取细节并将其与jconsole输出进行比较时,存在巨大差异。可能是什么问题?当我使用Runtime.getFreeMemory()或ManagementFactory.getMemoryMXBean()时,我得到的信息不正确.getHeapMemoryUsage()。getMax() - 。ManagementFactory.getMemoryMXBean()getHeapMemoryUsage()getUsed();
可能是什么问题?任何建议/意见都非常感谢。
由于
答案 0 :(得分:0)
Runtime.getFreeMemory()
告诉您分配的内存量。它是Runtime.totalMemory()
- 当前使用的内存。 Runtime.maxMemory()
是您指示JVM可以分配的总内存(-Xmx
)。它可能超过Runtime.totalMemory()
。您可能正在查看最大内存与jconsole中使用的区别。要对此进行测试,请尝试将(-Xms
)设置为与(-Xmx
)相同,这将使JVM在开始时分配最大内存。