[Note] 2020-11-05 Android上排查内存问题之内存分配分析

环境 Android Studio 4.1

利用 AS 自带工具分析内存分配情况

一 打开分析工具 Profiler

  1. 可以在 Help 中搜索关键字 Profiler
  2. 可以直接找到 View - Tool Windows - Profiler
  3. 打开过一次后,在底部直接打开
打开Profiler工具.png

二 Profiler 界面

右键底部的 Profiler tab,可以选择 View Mode,设置为 Windows 模式,独立成窗口模式,比较容易看(而且开发的一般有两个屏幕,把 Profile 窗口放到另外一个屏幕刚好一个屏幕看代码,一个屏幕看 Profiler 工具分析窗口)

设置窗口模式.png

窗口模式.png

三 开始录制分析内容

选择目标进程(或者打开 Profiler 工具,直接 Run 项目,就自动选择为当前 Run 的进程)

选择目标进程.png

Profiler监控某个进程的界面.png

选择Memory.png

开始录制某一段时间内某个对象类型分配内存的次数.png

查看录制结果.png

查看各个线程内存分配情况.png

图的方式查看.png

根据线程号查找进程的方法.png

接下来抓大头的分析各个线程的情况时,可以看到 6699 分配了 64次,总大小 29M多,然后查看该线程的任务,以排查代码中的问题(给线程起个名字是多么重要哇~)

四 一个例子

    @Override
    protected void onCreate(Bundle savedInstanceState) { 
        // ...
        testThread.start();
    }


    private Thread testThread = new Thread(new Runnable() {
        @Override
        public void run() {
            while (true) {
                allocMethod();
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }, "alloc_thread");

    private byte[] allocMethod() {
        Log.d("test", "allocMethod:");
        return new byte[(int) (1024 * 10)];
    }
结果.png

五 最后

其实对象分配内存的次数可以有效分析一些内存问题,比如内存抖动等问题
当然,写个例子用来分析是非常简单的,但是实际项目中的问题定位起来肯定会异常地困难,这里的主要目的是解释如何使用这个工具进行分析而已。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容