建设一个网站 需要提供什么,电商网站建设讯息,高层网络架构,wordpress comment_status内存泄露测试的整个过程如下#xff1a;在手机里启动被测APP并打开DDMS。在DDMS中选中【com.example.android.hcgallery】之后单击按钮【show heap updates】#xff0c;然后切换到标签页【VM Heap】#xff0c;再单击按钮【Cause GC】。不断操作APP#xff0c;并观察Heap。… 内存泄露测试的整个过程如下在手机里启动被测APP并打开DDMS。在DDMS中选中【com.example.android.hcgallery】之后单击按钮【show heap updates】然后切换到标签页【VM Heap】再单击按钮【Cause GC】。不断操作APP并观察Heap。经过一段时间的操作我们发现不论是%Used还是data object的Total Size都在不断增加如图。正常情况下Total Size会稳定在一定范围内。图 VM Heap 1即使进行Cause GC之后仍会继续增加如图图 VM Heap 2此时我们怀疑如果长期下去可能有内存泄露的可能性为了进一步分析我们单击按钮【Dump HPROF File】得到一个后缀为hprof的文件生成该文件的时间较长请耐心等待。使用命令hprof-conv将得到的hprof文件转化为标准的hprof这样MAT才能识别。使用MAT打开转化之后的hprof文件选择图中的【Leak Suspects Report】即可。之后你会看到一个概要信息如图。它只是给出一个宏观的概念告诉你某些问题的占比对于分析并没有实质性的帮助。单击柱形图标按钮【Histogram】会生成一个视图它显示的是类实例的列表其中Shallow Heap代表对象自身占用的内存大小不包括它引用的对象。Retained Heap代表当前对象大小和当前对象可直接或间接引用到的对象的大小总和。在Shallow Heap列进行从大到小的排序我们发现byte[]占比最大选中之后右键依次选择【List objects】【with incoming referenes】进行钻取如图。图 Histogram视图再次按照Shallow Heap列进行从大到小的排序选择一个较大的对象并依次展开它的路径如图。这里我们关注自己写的代码也就是com.example.android.hcgallery.ContentFragment我们发现mBitmap比较可疑。这种方法适合对代码比较熟悉的朋友。图 with incoming references除了上述方法之外你也可以通过排除弱引用来分析这样能减少干扰因素。先按照Retained Heap从大到小排序之后右键最大的依次选择【Path To GC Roots】【exclude weak references】得到如图的数据。发现sBitmapCache这个变量占的比例较大可能有问题。图 exclude weak references小强课堂 在Java中存在强引用、弱引用、软引用这里给大家做一个普及强引用垃圾回收不会回收它需要我们主动设置为null。弱引用顾名思义比较弱当垃圾回收发现它只具有弱引用对象时不管当前内存空间是什么情况都会进行回收。软引用如果它只具有软引用对象时内存空间足够垃圾回收器就不会回收。但如果内存空间不足了就会回收。之后排查代码发现sBitmapCache是static HashMapmBitmap使用完成之后没有recycle掉。最后修改代码在mBitmap ! null时进行mBitmap.recycle()。这样一步步做下来至少你不会觉得混乱而是有规可循。另外有些内存泄露的分析可能没法一次性分析出来需要多次这就考验大家的耐心了。其实只要记住分析要有规可循耐心必不可少任何难题都可以解决的。 转载于:https://blog.51cto.com/xqtesting/2402372