内存泄漏分析 dump hprof


http://blog.csdn.net/jackesy/article/details/47039865

1.5  例子
举例一个典型的分析内存泄漏的过程:
1.  使用 Heap查看当前堆大小为 23.00M
2.  添加一个页后堆大小变为 23.40M
3.  将添加的一个页删除,堆大小为 23.40M
4.  多次操作,结果仍相似,说明添加/删除页存在内存泄漏 (也应注意排除其它因素的影响)
5.  Dump 出操作前后的 hprof 文件 (1.hprof,2.hprof),用 mat打开,并得到 histgram结果
6.  使用 HomePage字段过滤 histgram结果,并列出该类的对象实例列表,看到两个表中的对象集合大小不同,操作后比操作前多出一个 HomePage,说明确实存在泄漏
7.  将两个列表进行对比,找出多出的一个对象,用查找 GC Root的方法找出是谁串起了这条引用线路,定位结束
PS :
·        很多时候堆增大是 Bitmap引起的,Bitmap在 Histogram中的类型是 byte [],对比两个 Histogram中的 byte[]对象就可以找出哪些 Bitmap有差异
·        多使用排序功能,对找出差异很有用
2 内存泄漏的原因分析
总结出来只有一条: 存在无效的引用!
良好的模块设计以及合理使用设计模式有助于解决此问题。

猜你喜欢

转载自dannyhz.iteye.com/blog/2355007