http://blog.csdn.net/yutao52shi/article/details/50055669

前言

内存问题对于Android开发者是永远的痛。如果一个android程序员说他没有遇到过OutOfMemory,那只能说他绝对不是做Android的。以往在ADT年代,都是使用eclipse的Mat(http://www.eclipse.org/mat/)插件来做内存分析。在使用了Android Studio开发后,发现AS不仅带来了不少编码上的便利,同时还带来了很多有用的工具。其中的内存分析工具就是一个经典。

正文

打开AS,在底部的Android Monitor里面就能发现这个Memory的Tab,在里面可以实时的看到内存的走势,能够在自测中发现什么地方会造成内存暴增,同时也很容易的看出GC point(内存突然下降一大截,肯定就是做了Full GC)。

看到右边有4个按钮,第一个是暂停,暂时不做任何讲解了。下面详细讲解其他三个按钮的功能。

Initial GC

这个命令会让APP执行一次Full GC。这个功能使用场景不是很多,我一般是会在Dump Heap之前执行一次,这样会减少很多无用的对象。点击之后,有时候能够明显看出内存变化

Dump Java Heap

这个功能是我用得最多,也是认为最好用的内存分析功能。因为基本能够通过它观察出哪些对象占用了巨量内存,并且能够找出它们被什么对象把持住,导致无法释放。点击Dump JavaHeap后,APP会Freeze住。然后就是等待,这个时候最好别做其他事情,否则可能失败。大概几十秒后,就会进入读取hprof文件的界面了。

从途中可以基本看出来,有一个10Mac大小的Bitmap被gpuimage里面的模块把持住了(由于被混淆,所以类名是f)。通过这些信息,基本就可以解决绝大部分OOM问题了。

Start Allocation Tracking

这个功能可以记录一段区间内各个线程各个方法的内存分配情况。我用得并不多,主要用于调试在复杂系统里面短时间内存暴增造成GC频繁的Case。使用方法:先点击一次,然后会看到Memory
Recorder开始转动,然后自己开始在APP上面做相应的操作。在合适的时间再点一次,结束记录。

然后APP会Freeze,过一会儿就会进入到alloc文件的打开界面了。通过分析alloc数据,我们可以知道某一个thread里面的所有的调用过的方法所分配的堆大小,通过这些数据可以让我们针对方法级别堆程序进行优化。

题外话

除了即时Dump即时查看,我们也可以用AS直接打开.hprof和.alloc文件,十分方便打开一些其他人员(比如QA)Dump出来的Heap dump。
此外,这些工具虽然在以前的DDMS里面也带了,但是个人觉得在AS里面进行了一些Improvement,界面十分简洁,关键数据一目了然。基本能够满足日常生产需求了。但是如果要做更加深入的分析,还是需要借助外部工具,AS里面带的hprof查看工具远没有MAT的数据详细,只是提供了一些关键数据。

使用Android Studio调试内存问题的更多相关文章

  1. 使用新版Android Studio检测内存泄露和性能

    内存泄露,是Android开发者最头疼的事.可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴.  怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的 ...

  2. Android Studio调试功能使用总结【转】

    Android Studio调试功能使用总结[转]   这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码 ...

  3. Android Studio调试功能使用总结---转

    Android Studio调试功能使用总结[转]   这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码 ...

  4. android studio 调试技巧(简直太好用)

    android studio 调试技巧(简直太好用) 说到android studio的调试,很多人可能会说,这有什么可讲的不就是一个断点调试么,刚开始我也是这么认为的,直到我了解之后,才发现,调试原 ...

  5. 使用Android Studio调试UiAutomator过程中遇到的问题

    声明: 这里纪录了个人学习和使用Android Studio调试UiAutomator过程中遇到遇到的问题,不定时进行更新,欢迎一起交流学习 1.Excution faild for task ‘:a ...

  6. 使用 Android Studio 检测内存泄漏与解决内存泄漏问题

    本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...

  7. 【转】你所不知道的Android Studio调试技巧

    这篇写Android studio debug技巧个人觉得写得不错,转自:http://www.jianshu.com/p/011eb88f4e0d# Android Studio目前已经成为开发An ...

  8. Android Studio调试方法学习笔记

    (注:本人所用Android Studio的Keymap已设为Eclipse copy) 1.设置断点 只有设置断点,才好定位要调试什么地方,否则找不到要调试的地方,无法调试.(调试过程中也可以增加断 ...

  9. Android studio 分析内存泄漏

    以前用eclipse的时候,我们采用的是DDMS和MAT,不仅使用步骤复杂繁琐,而且要手动排查内存泄漏的位置,操作起来比较麻烦.后来随着Android studio的潮流,我也抛弃了eclipse加入 ...

随机推荐

  1. win 10 桌面路径还原到C盘拒绝访问

    解决: 问是否更改那里 点 否 即可 题外话: win10桌面注册表路径 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Exp ...

  2. SGU 120 Archipelago (简单几何)

    120. Archipelago time limit per test: 0.25 sec.  memory limit per test: 4096 KB Archipelago Ber-Isla ...

  3. DataGridView使用技巧十一:DataGridView用户输入时,单元格输入值的设定

    通过DataGridView.CellParsing事件可以设定用户输入的值.下面的示例:当输入英文文本内容的时候,立即被改变为大写.DataGridView.CellParsing在离开编辑的单元格 ...

  4. 从jQuery谈库与框架的设计之优劣

    jQuery是业内知名的javascript框架,它的实现和设计可以说代表了javascript界最高的水平,本文试从四个方面来以jQuery为例总结库与框架设计的原则和优劣判断. 解决问题 首先请看 ...

  5. 【转】【C++】C++ 中的线程、锁和条件变量

    线程 类std::thread代表一个可执行线程,使用时必须包含头文件<thread>.std::thread可以和普通函数,匿名函数和仿函数(一个实现了operator()函数的类)一同 ...

  6. HttpClient学习之 客户端HTTP编程入门

    说明 本文存在的原因,是想深入的学习下HttpClient.对应的网址是: http://hc.apache.org/httpcomponents-client-4.5.x/primer.html h ...

  7. e686. 显示打印窗口

    The print dialog allows the user to change the default printer settings such as the default printer, ...

  8. (转)从海康7816的ps流里获取数据h264数据

    海康7816使用ps流来封装h.264数据,这里使用的解码器无法识别ps流,因此需要将h264数据从ps流里提取出来 对于ps流的规定可以参考13818-1文档 这里从7816里获取到一些数据取样 0 ...

  9. Z字形扫描矩阵

    问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...

  10. 【Rmarkdown rmysql】

    http://stackoverflow.com/questions/21167070/how-to-query-multiple-times-and-close-the-connection-at- ...