使用Android Studio调试内存问题
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调试内存问题的更多相关文章
- 使用新版Android Studio检测内存泄露和性能
内存泄露,是Android开发者最头疼的事.可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴. 怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的 ...
- Android Studio调试功能使用总结【转】
Android Studio调试功能使用总结[转] 这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码 ...
- Android Studio调试功能使用总结---转
Android Studio调试功能使用总结[转] 这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码 ...
- android studio 调试技巧(简直太好用)
android studio 调试技巧(简直太好用) 说到android studio的调试,很多人可能会说,这有什么可讲的不就是一个断点调试么,刚开始我也是这么认为的,直到我了解之后,才发现,调试原 ...
- 使用Android Studio调试UiAutomator过程中遇到的问题
声明: 这里纪录了个人学习和使用Android Studio调试UiAutomator过程中遇到遇到的问题,不定时进行更新,欢迎一起交流学习 1.Excution faild for task ‘:a ...
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...
- 【转】你所不知道的Android Studio调试技巧
这篇写Android studio debug技巧个人觉得写得不错,转自:http://www.jianshu.com/p/011eb88f4e0d# Android Studio目前已经成为开发An ...
- Android Studio调试方法学习笔记
(注:本人所用Android Studio的Keymap已设为Eclipse copy) 1.设置断点 只有设置断点,才好定位要调试什么地方,否则找不到要调试的地方,无法调试.(调试过程中也可以增加断 ...
- Android studio 分析内存泄漏
以前用eclipse的时候,我们采用的是DDMS和MAT,不仅使用步骤复杂繁琐,而且要手动排查内存泄漏的位置,操作起来比较麻烦.后来随着Android studio的潮流,我也抛弃了eclipse加入 ...
随机推荐
- Xcode使用介绍
///// 应用程序文件的组织 Product Name:项目名字 Organization Name:组织机构名称 Company Identifier:公司唯一标识符 Bundle Identif ...
- The declared package "com.dao" does not match the expected package "src.com.dao"
今天把项目代码上传到svn后出现例如以下错误:The declared package "com.dao" does not match the expected package ...
- else好像必须做点什么,可以省点资源不做什么吗,else下不能用pass
portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': ...
- 【转】ImageView的Scaletype参数设置
ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等. 设置的方式包括: 1. 在layout xml中定义Android:s ...
- 原生javascript星级评分
写个最简单的原生js的星级评分: <div id="rank" class="pingfen"> <ul> <li>< ...
- SpringMVC--拦截器的使用
SpringMVC的请求如下面这种图所示: 可以看出所有的请求都要通过Dispatherservlet来接收,然后通过Handlermapping来决定使用哪个控制器,再根据ViewResolver ...
- github 远程仓库操作
工作中需要在github上保存项目,一个仓库中有多个分支,进行一些实验,方便后面操作. 参考链接 http://rogerdudler.github.io/git-guide/index.zh.htm ...
- RequireJS使用小结1——for Effective JavaScript Module Loading
1. require和define的区别 The require() function is used to run immediate functionalities, while define() ...
- erlang二进制的难理解的地方,有点神奇
40> <<A:16>> = <<1,2>>.<<1,2>>41> <<B:16/bits>> ...
- MVC下载远程文件流(WebClient)
public ActionResult DownLoad_File() { return File(ScLiu(PathUrl), "application/octet-stream&quo ...