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

Jan*_*olm 11 java memory-management

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

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

Lau*_*nen 14

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

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());
}
Run Code Online (Sandbox Code Playgroud)