如何监控java程序的内存使用情况?

时间:2015-10-22 14:00:56

标签: java

我刚刚提出了一种算法,我希望在时间和空间消耗方面证明其优于其他算法。我将用Java实现我的算法,有没有人知道如何在程序执行时监视Java程序的内存消耗?感谢。

4 个答案:

答案 0 :(得分:2)

从JDK 6开始,你在bin目录中有一个工具,它监视CPU,内存消耗以及产生的线程数。它被称为visualvm。只需启动它然后启动您的java进程。您将在左侧的工具中看到java进程。双击该过程并查看统计信息。希望这可以帮助。 :)

答案 1 :(得分:1)

虽然其他答案中提到的工具会告诉您Java分配给堆的内存量,但这只能作为程序内存消耗的上限 - JVM不会在不再需要的时刻对对象进行垃圾收集,它甚至可以增加堆大小而不是垃圾收集,并且只有在达到给定的堆限制(-Xmx)时才执行垃圾收集。

因此,您看到的图表可能远远高于程序真正需要的图表。

解决此问题的一种方法是逐步降低堆大小限制(-Xmx),直到程序在OutOfMemory异常时崩溃。

如果您知道算法中哪一点消耗的内存最多,可以使用另一种方法 - 在该点放置一个断点,进行堆转储,然后检查它以查看生活对象的数量占领。

答案 2 :(得分:0)

您可以使用

long memory = runtime.totalMemory() - runtime.freeMemory();

这个地方也为您提供了运行时间,因此对于您尝试做的事情可能非常有用! http://www.vogella.com/tutorials/JavaPerformance/article.html#runtimeinfo

答案 3 :(得分:0)

通过Google快速搜索即可找到答案。

  

使用totalMemory()和freeMemory()方法[...] java.lang.Runtime.totalMemory()

来自http://crunchify.com/java-runtime-get-free-used-and-total-memory-in-java/

所以

long totalmem = java.lang.Runtime.totalMemory();
long freemem  = java.lang.Runtime.freeMemory();
long consump  = totalmem - freemem;