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



我有一个大型Java应用程序,它有时会使用大量内存,我想每隔一段时间监控一下,看看是否达到或接近了堆或置换的限制。

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

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

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());
}

您可以尝试visualVM,这是一种适用于每个JDK的Java探查器。你会在"bin"文件夹中找到它。

最新更新