MAT是eclipse中的一个插件,不过也提供了独立的版本,在IDEA风靡的今天,建议直接使用独立版本,官网下载地址

http://www.eclipse.org/mat/downloads.php

根据操作系统版本下载最新的MAT

MAT配置

找到MemoryAnalyzer.ini文件,该文件里面有个Xmx参数,该参数表示最大内存占用量,默认为1024m,根据堆转储文件大小修改该参数即可。

获取堆转储文件

1、如果想主动获取,可以使用jamp命令,对于部署到服务器上的程序可以采用这种方式,获取堆转储文件后scp到本地,然后本地分析。jmap -dump:format=b,file=

2、如果想在发生内存溢出的时候自动dump,需要添加下面参数-XX:+HeapDumpOnOutOfMemoryError

MAT使用

打开MAT之后,加载dump文件,显示下面的界面。

一般用到比较多的2个功能 1、Histogram 2、Leak Suspects

Histogram

这个功能主要是查看类和对象关系,对象和对象之间的关系,用来定位哪些对象在FGC之后还活着,哪些对象占大部分内存。

1、点开Histogram,可列出每一个类的实例数,支持正则表达式查找,也可以计算出该类所有对象的retained size。

Shallow Heap就是对象本身占用内存的大小,不包含其引用的对象内存,实际分析中作用不大。常规对象(非数组)的ShallowSize由其成员变量的数量和类型决定。数组的shallow size有数组元素的类型(对象类型、基本类型)和数组长度决定。对象成员都是些引用,真正的内存都在堆上,看起来是一堆原生的byte[], char[], int[],对象本身的内存都很小。

Retained Heap值的计算方式是将Retained Set(当该对象被回收时那些将被GC回收的对象集合)中的所有对象大小叠加。或者说,因为X被释放,导致其它所有被释放对象(包括被递归释放的)所占的heap大小。

Retained Heap例子: 一个ArrayList对象持有100个对象,每一个占用16 bytes,如果这个list对象被回收,那么其中100个对象也可以被回收,可以回收16*100 + X的内存,X代表ArrayList的shallow大小。

所以,RetainedHeap可以更精确的反映一个对象实际占用的大小。

2、选择一个Class,右键选择List objects > with incoming references

在新页面会显示通过这个class创建的对象信息

3、选择一个对象,右键选择Path to GC Roots > **,通常在排查内存泄漏的时候,我们会选择exclude all phantom/weak/soft etc.references, 意思是查看排除虚引用/弱引用/软引用等的引用链,因为被虚引用/弱引用/软引用的对象可以直接被GC给回收,我们要看的就是某个对象否还存在Strong 引用链(在导出HeapDump之前要手动出发GC来保证),如果有,则说明存在内存泄漏,然后再去排查具体引用。

这时会拿到GC Roots到该对象的路径,通过对象之间的引用,可以清楚的看出这个对象没有被回收的原因,然后再去定位问题。

假如说上面对象此时本来应该是被GC掉的,简单的办法就是将其中的某处置为null或者remove掉,使其到GC Root无路径可达,处于不可触及状态,垃圾回收器就可以回收了。

Leak Suspects

Leak Suspects 界面提示可能存在内存的泄露。

然后接着,是问题一的描述,列出了一些比较大的实例。

点击Details可以看到细节信息

点开Details进入详情页面,在详情页面Shortest Paths To the Accumulation Point表示GC root到内存消耗聚集点的最短路径,如果某个内存消耗聚集点有路径到达GC root,则该内存消耗聚集点不会被当做垃圾被回收。

内存快照对比

为了有效的找出内存泄露的对象,一般会获取两个堆转储文件(先dump一个,隔段时间再dump一个),并同时打开两个dump文件。

打开其中一个Histogram,然后点击下面按钮。

选择另外一个需要对比的dump文件

通过对比结果可以方便的看出对象的变化情况,并快速定位问题。

char类型是多少 mat_这轮面试,居然只有20%的人了解 MAT 神器相关推荐

  1. JAVA中两个char类型相加_【技术干货】Java 面试宝典:Java 基础部分(1)

    海牛学院的 | 第 616 期 本文预计阅读 |18 分钟 Java 基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法, ...

  2. char类型怎么输入 c语言_还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)...

    21ic综合自网络信息 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识.所以本文尽可能的通过一篇文章完全讲解指针. 为什么 ...

  3. java char 计算_经典Java面试题之Java中Char类型的运算

    经典Java面试题之Java中Char类型的运算 char在java中称为"字符型",占2个字节.本文是百分网小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有 ...

  4. c语言中char的取值扩大,C语言中 char 类型的取值范围为什么是-128~127

    我们之前已经说过关于原码.反码和补码的一些东西,如果你没有看过,可以点这里< 你知道原码.反码和补码吗,进来了解一下吧 >看一下 . 好了,可能你不会太想看,所以我们一起再来简单的复习一下 ...

  5. 经典Java面试题-Java中Char类型的运算

    [面试原题] 假设y是字符类型,初始化值为'b',那么以下语句输出的结果是什么? A.  System.out.println(++y); B.   System.out.println(y+1); ...

  6. 如何把char类型的数字字符转换成int类型

    近来面试遇到一个问题,通过控制台输入一个12位的数字,然后进行一些计算,然后被困在如何把char类型的数字转换成int类型.通过搜索,找到两个解决办法. 1.把char型转换成int类型 for(in ...

  7. 8位alu运算器(vhdl语言)_C语言中signed char类型,能表示-128到127,为什么负数多一位?...

    初学者在学习C语言,谈到不同数据类型时,一般都能理解 unsigned 和 signed 的区别,无非就是有无符号而已.但是对于 signed 数据类型的数据范围,初学者却常常会感到迷惑. 对于 si ...

  8. 数据库中的字段varchar类型和char类型的区别?

    数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?

  9. E0144“const char *“ 类型的值不能用于初始化 “char *“ 类型的实体

    下面这段代码会显示E0144"const char *" 类型的值不能用于初始化 "char *" 类型的实体的报错,说明了const char* 和char ...

最新文章

  1. 单选框_vue实现单选框自定义样式
  2. FTP的主动传输模式(PORT Mode)及被动传输模式(Passive Mode)(PASV)(FTP客户端 client 服务端 server 通信原理)
  3. nobelking 3 js 数字和数字相加 字符串连接 数字和字符串连接1
  4. 纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js
  5. 做一个vue的todolist列表
  6. c#文件夹常用操作,属性设置,遍历、压缩
  7. 递归经典案例汉诺塔 python实现_python实现汉诺塔递归算法经典案例
  8. 190506每日一句
  9. eclipse插件开发总结
  10. 用友ERP-NC系统 NCFindWeb接口文件读取
  11. 鸿蒙10 5G手机,国内首款5G手机!中兴天机Axon 10 Pro 5G版体验点名单一览
  12. php百度热门关键词小偷,火端搜索2.1源码 PHP百度+好搜小偷程序
  13. 站长引流工具 最新UI默笙站长工具箱V2.0 带后台
  14. 如果在天堂遇见你,你还记不记得我是谁?
  15. Redis Java Client选型-Jedis Lettuce Redisson
  16. H263,H264简介
  17. sqlserver数据库操作大全——常用语句/技巧集锦/经典语句
  18. Cisco Catalyst 6500 10Gb以太网模块
  19. 龙芯翼龙2F小本gentoo升级ffmpeg到4.2.1
  20. 物流管理项目思路理清。。

热门文章

  1. SpringMVC+Hibernate +MySql+ EasyUI实现POI导出Excel(二)
  2. 矩阵求导公式,及MathJax公式编辑
  3. collections中的OrderedDict
  4. 清除webbrowser cookie/session的6种方法
  5. USB设备的插入和弹出的监听以及软弹出可移动媒体(如Windows的移除USB设备) ....
  6. ASP.NET中进行消息处理(MSMQ) 二
  7. 用户 'sa' 登录失败。 (Microsoft SQL Server,错误: 18456)
  8. Dojo-API介绍
  9. SpringBoot内置tomcat出现error:An incompatible version [1.1.32] of the APR based Apache Tomcat Native lib
  10. mysql之索引的工作机制