【问题标题】:java runtime.freememory() not matching with jconsole outputjava runtime.freememory() 与 jconsole 输出不匹配
【发布时间】:2012-10-01 18:08:17
【问题描述】:

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

时,我得到的详细信息不正确
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax() - ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();

可能是什么问题?非常感谢任何建议/cmets。

谢谢

【问题讨论】:

  • 您发现了什么差异?顺便说一句,您尝试过 VisualVM 吗?
  • 对不起,ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax() - ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();用 jconsole 反映 Runtime.getFreeMemory() 不是
  • free = total - used 当然。你能给我们一些数字吗?

标签: java jvm jconsole


【解决方案1】:

Runtime.getFreeMemory() 告诉您已分配的内存量。它是Runtime.totalMemory() - 当前使用的内存。 Runtime.maxMemory() 是您指出的 JVM 可以分配的总内存 (-Xmx)。它可以超过Runtime.totalMemory()。您可能正在查看 max memory 和 used in jconsole 之间的区别。要对此进行测试,请尝试将 (-Xms) 设置为与 (-Xmx) 相同,这将导致 JVM 在开始时分配最大内存。

【讨论】:

    猜你喜欢
    • 2012-10-31
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2015-01-18
    • 2010-12-24
    • 2021-11-19
    相关资源
    最近更新 更多