更新时间:2021-10-19 11:47:48 来源:极悦 浏览697次
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天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习