如何找到分配对象的剩余内存量?

时间:2014-01-28 01:15:59

标签: java memory jvm

你怎么知道JVM还剩下多少内存?

我知道Runtime.getRuntime()。freeMemory()将是可行的方法,但它似乎没有返回合理的值。例如,当我运行我的main方法时,我打印空闲内存并获得78904576字节,这只是75兆字节。因为我将maxMemory设置为2千兆字节似乎是不合理的。

老实说,我只是想知道我的内存耗尽有多近,所以提供替代机制的答案也是可以接受的。

2 个答案:

答案 0 :(得分:2)

这是公式

long availableMemory = Runtime.getRuntime().freeMemory() + (Runtime.getRuntime().maxMemory() - Runtime.getRuntime().totalMemory())

freeMemory()仅显示当前分配的内存中的空闲内存,为了获得所有可用内存,我们还必须包含尚未分配的内存。

另一种解决方案

    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
    long availableMemory = mu.getMax() - mu.getUsed();

答案 1 :(得分:0)

如果您真的想监视JVM内存,最好使用像YourKit或JProfilier这样的分析工具。