MemoryPoolMXBean.getUsage()相较于Runtime.freeMemory()的优势

3
我有一个需求,需要定期收集JVM的统计信息。随后,我需要记录JVM可用内存/空闲内存、已使用内存和总内存。

以下是我考虑的两种选项。

  1. 使用ManagementFactory.getMemoryPoolMXBeans()迭代每个MemoryPoolMXBean,并最终使用MemoryPoolMXBean.getUsage()收集统计信息。

  2. 使用Runtime.freeMemory()、Runtime.maxMemory()和Runtime.totalMemory。

哪种方法是收集统计信息的最佳方式?是使用MemoryPoolMXBean.getUsage()还是Runtime类?

1个回答

2
这段话是关于在整个应用程序生命周期中“倾听”内存使用情况,而不是在应用程序的各个位置上查找信息。
正如Java中的内存通知中所提到的,您可以通过将通知监听器添加到MemoryMXBean来实现交互式内存监控。
因此,对于局部检查,Runtime可能已经足够了,但对于全局监控,MemoryMXBeans是最好的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接