更新時間:2021-10-19 11:47:48 來源:動力節點 瀏覽850次
Histogram:列出內存中每個實例的數量、大小、關聯對象大小(注意單位為字節)
dominator tree(支配樹):在此視圖中列出了每個對象(Object Instance)與其引用關系的樹狀結構,同時包含了占用內存的大小和百分比
with outgoing references:查看當前對象,持有的對象信息
with incoming references:查看當前對象,被哪些對象持有
Shallow Heap表示對象本身占用內存的大小,不包含對其他對象的引用,也就是對象頭加成員變量(不是成員變量的值)的總和。
Retained Heap是該對象自己的Shallow Heap,并加上從該對象能直接或間接訪問到對象的Shallow Heap之和。換句話說,Retained Heap是該對象GC之后所能回收到內存的總和。
thread overview:線程視圖,展示堆內存中線程棧情況
Object Query Language (OQL) ,mat內置的對象查詢語言,便于統計分析各種內存對象【注意,這里要結合對象占比、線程情況、異常類等綜合判斷,查詢的結果也可以結合vim、excel等便于統計分析】
例:
根據線程等分析出如下的異常對象:
java.io.BufferedOutputStream byte[]
com.mysql.jdbc.MysqlIO
com.mysql.jdbc.JDBC4Connection
OQL查詢視圖(F1查看語法):
1.查看sql連接的用戶
SELECT toString(s.user.value) FROM com.mysql.jdbc.JDBC4Connection s
2.查看sql連接的語句
SELECT toString(s.buf) FROM java.io.BufferedOutputStream s
3.查看redis.clients.jedis.Client對象的持有的對象信息
SELECT toString(s.buf) FROM redis.clients.util.RedisOutputStream s
SELECT toString(s.buf) FROM redis.clients.util.RedisOutputStream s WHERE (toString(s.buf).length() = 1024)
查看redis的inputstream的命中情況
SELECT toString(s.buf) FROM redis.clients.util.RedisInputStream s WHERE (toString(s.buf) LIKE "\+OK\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\..*")
3.查看redis的連接情況
SELECT s.port, toString(s.host) FROM redis.clients.jedis.HostAndPort s
4.查看字節數組
SELECT * FROM byte[] s
SELECT * FROM byte[] s where toString(s).length() =1024
SELECT toString(s), s.@usedHeapSize,s.@retainedHeapSize FROM byte[] s WHERE (toString(s).length() = 1024)
SELECT toString(s), s.@usedHeapSize, s.@retainedHeapSize FROM byte[] s WHERE (s.@usedHeapSize = 8208)
*********21124個 8208字節 占內存160M+
以上就是關于“Java內存分析工具技巧”的介紹,Java內存分析工具是常見的Java開發工具之一,以后大家還會接觸到更多的工具,可要好好學習哦。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習