更新時間:2021-10-19 11:47:48 來源:動力節(jié)點 瀏覽843次
Histogram:列出內(nèi)存中每個實例的數(shù)量、大小、關(guān)聯(lián)對象大小(注意單位為字節(jié))
dominator tree(支配樹):在此視圖中列出了每個對象(Object Instance)與其引用關(guān)系的樹狀結(jié)構(gòu),同時包含了占用內(nèi)存的大小和百分比
with outgoing references:查看當前對象,持有的對象信息
with incoming references:查看當前對象,被哪些對象持有
Shallow Heap表示對象本身占用內(nèi)存的大小,不包含對其他對象的引用,也就是對象頭加成員變量(不是成員變量的值)的總和。
Retained Heap是該對象自己的Shallow Heap,并加上從該對象能直接或間接訪問到對象的Shallow Heap之和。換句話說,Retained Heap是該對象GC之后所能回收到內(nèi)存的總和。
thread overview:線程視圖,展示堆內(nèi)存中線程棧情況
Object Query Language (OQL) ,mat內(nèi)置的對象查詢語言,便于統(tǒng)計分析各種內(nèi)存對象【注意,這里要結(jié)合對象占比、線程情況、異常類等綜合判斷,查詢的結(jié)果也可以結(jié)合vim、excel等便于統(tǒng)計分析】
例:
根據(jù)線程等分析出如下的異常對象:
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.查看字節(jié)數(shù)組
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字節(jié) 占內(nèi)存160M+
以上就是關(guān)于“Java內(nèi)存分析工具技巧”的介紹,Java內(nèi)存分析工具是常見的Java開發(fā)工具之一,以后大家還會接觸到更多的工具,可要好好學習哦。