MAT使用

一、内存导出

运行进程,用jmap导出HPROF文件。如下:
内存导出
用jmap语句:jmap -dump:format=b.file=(文件名).hprof (进程号)

二、使用MAT查看HPROF文件视图

先用MAT打开HPROF文件会有如下视图:
Overview

在下方有查看Histogram,Dominator Tree,Top Consumers,Leak Suspects视图的功能。这些都可以帮助分析程序内存占用等情况。

三、OQL的使用

在上方工具栏里如下:
在这里插入图片描述

点击此按钮即可开始使用OQL进行查询。

以下为oql查询语句:
1、OQL-SELECT

1.SELECT * FROM Java.lang.String
2.SELECT toString(s), s.count, s.value FROM java.lang.String s
3.SELECT toString(s) AS Value,s.@usedHeapSize AS “Shallow Size” FROM java.lang.String s
(@为属性访问器,可以使用AS起个别名 )
4.SELECT AS RETAINED SET * FROM java.lang.String
(使用AS RETAINED SET 获得与选择对象相关联的对象集合)
5.SELECT OBJECTS dominators(s) FROM java.lang.String s
( OBJECTS 关键字使得dominators 返回二维数组简化为一维对象列表 )
6.SELECT DISTINCT OBJECTS classof(s) FROM java.lang.String s
( DISTINCT 去重复 )

7、 查询所有的异常对象
SELECT * FROM INSTANCEOF java.lang.Exception exceptions
SELECT exceptions.@displayName , exceptions.detailMessage.toString() FROM INSTANCEOF java.lang.Exception exceptions

2、OQL-FROM

1.SELECT * FROM “java.lang…*”
(支持正则)
2.SELECT * FROM java.lang.String
3.SELECT * FROM 0xe14a100
(根据 类对象 在堆转储快照中的地址查询)
4.SELECT * FROM 3022
(根据对象在堆转储快照中的地址ID)
5.SELECT * FROM ( SELECT * FROM java.lang.Class c )
6.SELECT * FROM ${snapshot}.getClasses()
(使用属性访问器)
7.SELECT * FROM INSTANCEOF java.lang.ref.Reference
( INSTANCEOF 会把指定类的子类也查询出来)
8.SELECT * FROM OBJECTS java.lang.String
( OBJECTS 禁止OQL把查询范围解释为对象实例,上述结果为java.lang.String对应的Class)

3、OQL-WHERE

1.SELECT * FROM java.lang.String s WHERE s.count >= 100
2.SELECT * FROM java.lang.String s WHERE toString(s) LIKE “.*day”
3.SELECT * FROM java.lang.String s WHERE s.value NOT IN dominators(s)
4.SELECT * FROM java.lang.String s WHERE toString(s) = “monday”
5.SELECT * FROM java.lang.String s WHERE s.count > 100 AND s.@retainedHeapSize > s.@usedHeapSize
6.SELECT * FROM java.lang.String s WHERE s.count > 1000 OR s.value.@length >1000
7.SELECT * FROM java.lang.String s WHERE (s.count > 1000) = true
WHERE toString(s) = “monday”
WHERE dominators(s).size() = 0
WHERE s.retainedHeapSize > 1024L
WHERE s.@GCRootInfo != null

如下示例:
在这里插入图片描述
circularorbit的所有对象实例

在这里插入图片描述
大于特定长度 100的 String 对象

在这里插入图片描述
大于特定大小的任意类型对象实例

在这里插入图片描述
PhysicalObject(及其子类)的对象实例的数量和总占用内存大小

在这里插入图片描述
查找包含元素数量大于100的map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值