我刚刚提出了一种算法,我希望在时间和空间消耗方面证明其优于其他算法。我将用Java实现我的算法,有没有人知道如何在程序执行时监视Java程序的内存消耗?感谢。
答案 0 :(得分:2)
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;