Java 内存分析工具 MAT 使用技巧
本文列出作者在日常使用 Java 内存分析工具 MAT 的过程中用到的一些技巧
导出长字符串
有时候我们经常要从 heap 中复制出某些很长的字符串, 来观察它到底有哪些数据. 通常我们通过: 在某个字符串上点击右键 - Copy -> Value. 但是通常这个复制出的内容都有长度限制.
比如下面的例子, 我想从 HTTP request 的 HeapByteBuffer 复制出它已经读取请求的内容, 但是通过上面的方法只能复制出几千的字符:
但是如果其内容远超这个数量, 拿到的就是部分数据, 根据部分数据可能得出错误的结论.
如何完全导出其内容?
在上面的菜单中选择 -> Save Value To File. 就能导出全部内容.
不过对于上面例子中的 HeapByteBuffer 要特别注意, 它是通过当前的位置(pos)来标记那里是有效数据的, pos 位置之后可能还有数据, 只不过是无效数据.
根据字段值分组统计
SQL 里面有 select * from table_0 group by column_0
. 可是 OQL 里面却没有这个语句. 但是MAT 却提供了这样的功能.
根据下面的菜单栏, 就能找到 Group By Value 选项.
然后填入你想分组的类名字和要分组的字段. 下面以 java.util.regex.Pattern
的 normalizedPattern
来分组:
最终看到每个 normalizedPattern
的统计个数: