繁体   English   中英

如何监视Java程序的内存使用情况?

[英]how to monitor the memory usage of a java program?

我只是提出了一种算法,我想证明其在时间和空间消耗方面与另一种算法相比的优越性。 我将用Java实现算法,有人知道如何在执行程序时监视Java程序的内存消耗吗? 谢谢。

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

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

因此,您将看到的图形可能会超出程序真正需要的图形。

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

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

您可以使用

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

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

通过快速的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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM