zoukankan      html  css  js  c++  java
  • Android中如何查找内存泄露

    1、首先确定是否有内存泄露及哪个程序造成。

    1.1、内存泄露已弹出out of memory对话框的情况。

    这种情况很简单,直接看对话框就知道是哪个应用的问题了。然后再分析该应用是否是因为内存泄露造成的out of memory对话框。

    1.2、对于有内存泄露,但没造成弹出out of memory对话框的情况

    使用《Android中如何查看内存》中介绍的各种方法进行分析,确定是否有内存泄露以及是哪个进程造成的内存泄露。

    2、生成hprof文件,用MAT进行分析。

    生成hprof文件可以在DDMS选中进程点击窗口左上角的"dump hprof file"按钮来直接生成,也可以通过在程序加代码中来生成

    代码2

        void generateHprof()

        {

                String packageName=getApplicationInfo().packageName;

                String hpFilePath="/data/data/"+packageName+"/input.hprof";

                try {

                      //Debug.dumpHprofData("/sdcard/input.hprof");

                      Debug.dumpHprofData(hpFilePath);

                } catch (IOException e) {

                      // TODO Auto-generated catch block

                      e.printStackTrace();

                }

        }

    建议使用代码生成hprof,然后使用《Android内存泄露利器(hprof篇)》中的工具自动提取多个hprof文件,然后用MAT进行比较分析。

    MAT导入.hprof文件以后,MAT会自动解析并生成报告,点击Dominator Tree,并按Package分组,选择自己所定义的Package类,比较各个类在不同时期的Retained Heap,找出可疑类,然后选择该类,点右键,选中show retained Set 项,参看Retained Heap的详细信息,进一步找出嫌疑项。

    3、在代码中查找内存泄露。

      根据在MAT找到的内存泄露信息,参照《Android内存泄漏简介》进一步在内存中查找内存泄露的原因并解决。

    另外如果代码很简单,可以直接参照《Android内存泄漏简介》在内存中查找内存泄露的原因并解决。

  • 相关阅读:
    Find the Smallest K Elements in an Array
    Count of Smaller Number
    Number of Inversion Couple
    Delete False Elements
    Sort Array
    Tree Diameter
    Segment Tree Implementation
    Java Programming Mock Tests
    zz Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    Algorithm about SubArrays & SubStrings
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4580642.html
Copyright © 2011-2022 走看看