如何打印出Java jvm内存用于调试目的?

时间:2012-03-27 10:25:44

标签: java memory-management

我有一个大型Java应用程序,有时会使用大量内存,我希望每隔一段时间监视一次,以查看是否已达到堆或permgen限制或已接近它们。

如何使用java打印最相关的mem使用信息?

2 个答案:

答案 0 :(得分:13)

以下是我们的一段代码片段,它定期记录我们应用的内存使用情况:

import java.lang.management.GarbageCollectorMXBean
import java.lang.management.ManagementFactory
import java.lang.management.MemoryPoolMXBean
import java.lang.management.MemoryUsage

log("Heap", ManagementFactory.getMemoryMXBean().getHeapMemoryUsage());
log("NonHeap", ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage());
List<MemoryPoolMXBean> beans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean bean: beans) {
    log(bean.getName(), bean.getUsage());
}

for (GarbageCollectorMXBean bean: ManagementFactory.getGarbageCollectorMXBeans()) {
    log(bean.getName(), bean.getCollectionCount(), bean.getCollectionTime());
}

答案 1 :(得分:1)

您可以尝试使用VisualVM,这是一个与每个JDK一起使用的Java分析器。您可以在“bin”文件夹中找到它。