4.使用MAT工具来分析生成的hprof文件内容
4.1打开需要分析的hprof文件:
4.2 在Overview(概述)界面利用饼图的摘要信息来分析哪些对象比较占内存

 老李案例分享:MAT分析应用程序服务出现内存溢出过程2_软件测试开发

4.3分析Action部分内容:

 老李案例分享:MAT分析应用程序服务出现内存溢出过程2_软件测试开发_02

4.3.1点击“Leak Suspects”后的结果如下:

 老李案例分享:MAT分析应用程序服务出现内存溢出过程2_软件测试开发_03

4.3.2 在怀疑问题的第点Details

 老李案例分享:MAT分析应用程序服务出现内存溢出过程2_软件测试开发_04

4.3.3查看有问题的的类所引用的所有对象。此时使用鼠标左键点击,然后弹出菜单中进行如下选择:List Objects->with outgoing references

(说明:

图中的Shallow Heap(浅堆):指对象自身占用内存的大小,不包括它引用的对象。

图中的 Retained Heap(深堆):指当前对象大小+当前对象可直接或间接引用到对象的大小总和

 老李案例分享:MAT分析应用程序服务出现内存溢出过程2_软件测试开发_05

 老李案例分享:MAT分析应用程序服务出现内存溢出过程2_软件测试开发_06

此时可以点击鼠标左键,将sql语句的内容进行拷贝.

 老李案例分享:MAT分析应用程序服务出现内存溢出过程2_软件测试开发_07

此时就找到了问题。

另述:

其实上述第4步找问题的步骤可以简化为在Overview的饼图中通过选择Path to GC Roots 来发现JAVA的内存泄露问题

Pathto GC Roots:被JVM持有的对象,如当前运行的线程对象,被systemclass loader加载的对象被称为GC Roots, 从一个对象到GC Roots的引用链被称为Pathto GC Roots, 通过分析Pathto GC Roots可以找出JAVA的内存泄露问题,当程序不在访问该对象时仍存在到该对象的引用路径。)

 老李案例分享:MAT分析应用程序服务出现内存溢出过程2_软件测试开发_08