簡體   English   中英

如何衡量Java中的峰值堆內存使用情況?

[英]How to measure peak heap memory usage in Java?

如何衡量Java中的峰值堆內存使用情況? MemoryPoolMXBean跟蹤每個內存池的峰值使用情況,但不記錄整個堆。 峰值堆使用量不僅僅是不同堆內存池的總和。

您是否考慮過使用Runtime類的totalMemory()函數 - docs 還有一些像VisualVMJStat這樣的免費工具,例如:

jstat -gc <pid> <time> <amount>

希望有所幫助。

如果需要峰堆大小,可以組合HEAP類型的所有內存池的峰值使用大小

這是一個例子:

List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
long total = 0;
for (MemoryPoolMXBean memoryPoolMXBean : pools)
{
  if (memoryPoolMXBean.getType() == MemoryType.HEAP)
  {
    long peakUsed = memoryPoolMXBean.getPeakUsage().getUsed();
    System.out.println("Peak used for: " + memoryPoolMXBean.getName() + " is: " + peakUsed);
    total = total + peakUsed;
  }
}

System.out.println("Total heap peak used: " + Util.format(total));

看看這篇文章https://cruftex.net/2017/03/28/The-6-Memory-Metrics-You-Should-Track-in-Your-Java-Benchmarks.html ,它提到了GarbageCollectionNotificationInfo並且有實現使用JMH (我還沒試過)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM