我有一个大型Java应用程序,有时会使用大量内存,我希望每隔一段时间监视一次,以查看是否已达到堆或permgen限制或已接近它们。
如何使用java打印最相关的mem使用信息?
答案 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”文件夹中找到它。