• 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内存泄漏简介》在内存中查找内存泄露的原因并解决。

  • 相关阅读:
    Ubuntu 18.04 LTS 启用BBR
    MySQL with JDBC <一>
    HTML 实录 <一>
    Nginx CloudFlare 客户端真实IP
    Ubuntu 16.04 释放升级到 18.04 后, man: command exited with status 4
    JSP 从入门到精通 <一>
    Nginx URL重写
    JavaScript 修改 CSS 伪类属性
    i-83.net quadhost子产品
    HTML 重定向 页面跳转
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4580642.html
Copyright © 2020-2023  润新知