什么是jmap?
共享對象內存映射或堆內存細節
。

jmap -heap pid

查看內存中對象數量及大小
#查看所有對象,包括活躍以及非活躍的
jmap -histo <pid> | more
#查看活躍對象
jmap -histo:live <pid> | more
對象說明
B: byte
C:char
D:double
F: float
I: int
J :long
Z :boolean
'[' :數組,如:'[I':表示int[]
'[L+':類名 其他對象
將內存使用情況dump到文件中
有些時候我們需要將jvm當前內存中的情況dump到文件中,然后對它進行分析,jmap也
是支持dump到文件中的。
#用法:
jmap ‐dump:format=b,file=dumpFileName <pid>
通過jhat對dump文件進行分析
將jvm的內存dump到文件中,這個文件是一個二進制的文件,不方便查看,這時我們可以借助於jhat工具進行查看
#用法:
jhat ‐port <port> <file>
在瀏覽器中進行查看
在最下面有一個查詢功能
輸入: select s from java.lang.String s where s.value.length >= 1000 (查詢長度大於等於1000的字符串)
結果會在左下角顯示出來
通過MAT工具對dump文件進行分析
MAT(Memory Analyzer Tool),一個基於Eclipse的內存分析工具,是一個快速、功能豐富的JAVA heap分析工具,
它可以幫助我們查找內存泄漏和減少內存消耗。
使用內存分析工具從眾多的對象中進行分析,快速的計算出在內存中對象的占用大小,看看是誰阻止了垃圾收集器的回收工作,
並可以通過報表直觀的查看到可能造成這種結果的對象。
官網地址:https://www.eclipse.org/mat/
下載與解壓完成之后
使用
actions下面的
Histogram:列出內存中的對象,對象的個數以及大小
Dominator Tree:列出最大的對象以其依賴存活的對象
點擊Histogram進入查看內存中的對象,對象的個數以及大小
點擊Dominator Tree查看最大的對象以其依賴存活的對象
點擊default_report進行查看查看可能存在內存泄露的分析