专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Java内存分析工具技巧

Java内存分析工具技巧

更新时间:2021-10-19 11:47:48 来源:动力节点 浏览625次

常用的功能点:

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查看语法):

100M jdbc堆积大小

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开发工具之一,以后大家还会接触到更多的工具,可要好好学习哦。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>