簡體   English   中英

為什么堆內存使用圖看起來像這樣?

[英]Why does heap memory usage graph look like this?

我已經在我的 JVM 上安裝了 glowroot(java 應用程序監控)。 當我的應用程序空閑時,我會得到這種內存堆使用情況圖。 圖案看起來幾乎是統一的。 有人可以解釋並指出我關於為什么圖表看起來像這樣的任何博客文章嗎? 我好奇。

在此處輸入圖片說明

大規模鋸齒圖案表示 GC 周期之間的內存利用率。 應用程序穩定地分配對象(上坡線),直到堆滿讓 VM 決定運行 GC(重點)。 然后 GC 回收大量垃圾(急劇下降)並重新開始該過程。

向上和向下的短尖峰更難理解。 向上的尖峰可能代表了觸發年輕代周期的異常“大”分配(短生命周期對象)。 向下的尖峰可能表示緩存對象因“內存壓力”而被釋放。

如果您想更好地了解峰值,您需要查看 GC 日志消息,並嘗試將它們與圖表相關聯。

看起來像那樣是因為(至少)您正在觀察它。 如果您的應用程序完全沒有做任何事情,並且沒有線程進行任何分配,那么您將獲得一條水平線作為堆。

但是,由於您正在觀察它,因此 JVM 中正在執行一些操作以將這些數據返回給您。 這就是為什么您會在許多分析問題中看到無處不在的鋸齒圖案。 下面舉幾個例子。

java內存泄漏,visualvm顯示錯誤數據

visualvm 監控內存使用情況

這是工作中的java垃圾收集。 每次刪除都是垃圾收集器,通過刪除未使用的引用來釋放內存。 它再次增長的原因僅僅是因為您的應用程序不斷創建新的引用。

您還可以查看這篇文章以獲得更深入的解釋: 為什么是鋸齒形圖?

暫無
暫無

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

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