java runtime.freememory()与jconsole输出不匹配
我遇到了一个奇怪的问题。我有多个JVM正在运行,我需要获取它们的内存使用详细信息。当我通过java runtime.freememory()与jconsole输出不匹配,java,jvm,jconsole,Java,Jvm,Jconsole,我遇到了一个奇怪的问题。我有多个JVM正在运行,我需要获取它们的内存使用详细信息。当我通过Runtime.getFreeMemory()获取详细信息并将其与jconsole输出进行比较时,会发现有很大的不同。有什么问题吗??使用Runtime.getFreeMemory()或 ManagementFactory.getMemoryXbean().getHeapMemoryUsage().getMax()-ManagementFactory.getMemoryXbean().getHeapMemo
Runtime.getFreeMemory()
获取详细信息并将其与jconsole输出进行比较时,会发现有很大的不同。有什么问题吗??使用Runtime.getFreeMemory()
或
ManagementFactory.getMemoryXbean().getHeapMemoryUsage().getMax()-ManagementFactory.getMemoryXbean().getHeapMemoryUsage().getUsed();
有什么问题吗??非常感谢您的任何建议/意见
感谢运行时。getFreeMemory()告诉您分配的内存中剩余的内存量。它是
Runtime.totalMemory()
——当前使用的内存Runtime.maxMemory()
是您指示JVM可以分配的总内存(-Xmx
)。它可以超过运行时.totalMemory()。您可能看到了最大内存和jconsole中使用的内存之间的差异。要测试这一点,请尝试将(-Xms
)设置为与(-Xmx
)相同,这将导致JVM在开始时分配最大内存。您看到了什么差异?顺便说一句,你试过VisualVM吗?对不起,ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax()-ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();使用jconsole反映,其中as Runtime.getFreeMemory()不是free=total-当然是已使用的。你能给我们一些数字吗?