做內存優(yōu)化前,需要了解當前應用的內存使用現(xiàn)狀屿笼,通過現(xiàn)狀去分析哪些數(shù)據(jù)類型有問題牺荠,各種類型的分布情況,以及在發(fā)現(xiàn)是哪些具體對象導致的驴一,這就需要相關工具來幫助我們進行分析休雌。以下介紹常用的幾種內存分析工具
Memory Monitor
Memory Monitor 是一款使用簡單的圖形化工具,可以很好地監(jiān)控系統(tǒng)或應用的內存使用情況
主要提供以下功能:
(1).顯示可用和已用內存肝断,并且以時間為維度杈曲,實時反應內存分配和回收情況驰凛。
(2).快速判斷應用程序的運行緩慢是否由于過度的內存回收導致。
(3).快速判斷應用是否由于內存不足導致程序崩潰担扑。
Heap Viewer
Heap Viewer 的主要功能是查看不同數(shù)據(jù)類型在內存中的使用情況恰响,可以看到當前進程中的 Heap Size 的情況,包含有哪些類型的數(shù)據(jù)涌献,以及各種類型的數(shù)據(jù)占比情況胚宦。通過分析這些數(shù)據(jù)來找到大的內存對象,再進一步分析這些大對象燕垃,進而通過優(yōu)化減少內存開銷枢劝,也可以通過數(shù)據(jù)的變化發(fā)現(xiàn)內存泄漏
主要有以下功能:
(1)實時查看App分配的內存大小和空閑內存大小
(2)發(fā)現(xiàn)Memory Leaks
Heap Viewer不光可以用來檢測是否有內存泄漏,對于內存抖動卜壕,也可以用該工具檢測您旁,因為內存抖動的時候,會頻繁發(fā)生GC印叁,這個時候我們只要開啟Heap Viewer被冒,就可以觀察數(shù)據(jù)的變化军掂。如果發(fā)生內存抖動轮蜕,會觀察到數(shù)據(jù)在一段時間內頻繁更新
Allocation Tracker
Memory Monitor 和 Heap Viewer 都可以很直觀且實時地監(jiān)控內存的使用情況,還能發(fā)現(xiàn)內存問題蝗锥,但發(fā)現(xiàn)內存問題后不能再進一步找到原因跃洛,或者發(fā)現(xiàn)一塊異常內存但不能區(qū)分是否正常,不能定位到具體的類和方法终议。這時可以使用另一個內存分析工具 Allocation Tracker汇竭,進行更詳細的分析, Allocation Tracker 可以分配跟蹤記錄應用程序的內存分配穴张,并列出了它們的調用堆棧细燎,可以查看所有對象內存分配的周期
Memory Analyzer Tool(MAT)
MAT 是一個功能豐富的 Java Heap 分析工具,通過分析 Java 進程的內存快照 HPROF 分析皂甘,從眾多的對象中分析玻驻,快速計算出在內存中對象占用的大小,查看哪些對象不能被垃圾收集器回收偿枕,并可以通過視圖直觀地查看可能造成這種結果的對象