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

如何监控java程序的内存使用情况?,java,Java,我刚刚提出了一个算法,我想证明它在时间和空间消耗方面与另一个算法相比的优越性。我将用Java实现我的算法,有人知道如何在程序执行时监控Java程序的内存消耗吗?谢谢。您可以使用 long memory = runtime.totalMemory() - runtime.freeMemory(); 这个地方还为您提供运行时,因此对于您正在尝试做的事情可能也非常有用! 您可以使用 long memory = runtime.totalMemory() - runtime.freeMemory();

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

您可以使用

long memory = runtime.totalMemory() - runtime.freeMemory();
这个地方还为您提供运行时,因此对于您正在尝试做的事情可能也非常有用! 您可以使用

long memory = runtime.totalMemory() - runtime.freeMemory();
这个地方还为您提供运行时,因此对于您正在尝试做的事情可能也非常有用! 您可以使用

long memory = runtime.totalMemory() - runtime.freeMemory();
这个地方还为您提供运行时,因此对于您正在尝试做的事情可能也非常有用! 您可以使用

long memory = runtime.totalMemory() - runtime.freeMemory();
这个地方还为您提供运行时,因此对于您正在尝试做的事情可能也非常有用!

通过快速谷歌搜索找到答案

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

所以


答案是通过谷歌快速搜索找到的

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

所以


答案是通过谷歌快速搜索找到的

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

所以


答案是通过谷歌快速搜索找到的

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

所以


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

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

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

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

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

因此,您将看到的图表可能比程序真正需要的要高得多

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


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

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

因此,您将看到的图表可能比程序真正需要的要高得多

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


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

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

因此,您将看到的图表可能比程序真正需要的要高得多

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


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

而其他答案中提到的工具将告诉您Java为堆分配了多少内存,这只能被视为程序内存消耗的上限,JVM不会垃圾收集对象