你怎么知道JVM还剩下多少内存?
我知道Runtime.getRuntime()。freeMemory()将是可行的方法,但它似乎没有返回合理的值。例如,当我运行我的main方法时,我打印空闲内存并获得78904576字节,这只是75兆字节。因为我将maxMemory设置为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这样的分析工具。