使用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加入 ...
随机推荐
- uboot中bootargs实现
setup.h通过宏定义实现了bootargs传递参数到内核,值得以后编程学习. include/asm-arm/setup.h 14 * NOTE: 15 * This file contai ...
- kafka_zookeeper_配置文件配置
server.properties配置如下: broker.id=0 num.network.threads=2 num.io.threads=8 socket.send.buffer.bytes=1 ...
- C++中声明与定义的区别
如果是指变量的声明和定义: 从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存.而 定义就是分配了内存.对于下面的两句代码:void Func(){in ...
- php 进度条
<?php header( 'Content-type: text/html; charset=utf-8' ); echo 'Begin ...<br />'; for( $i = ...
- am335x phy led problem
问题描述 连接网线的情况下,每次进行软件"reboot",网口的LINK LED能够正常的熄灭,而ACTIVE LED却是亮的. reboot重启之后,LINK的灯正常变亮,而AC ...
- gsoap 学习 1-如何使用
新年伊始,想把onvif和gsoap boa这三个东西学习下,并作下笔记,当然为了省时间,我昨天下午看了一个下午的gsaop官网pdf感触良多,也做了小测试,废话少说,一下也有一些是摘自网友博客,大部 ...
- Storm On YARN带来的优点
1)弹性计算资源 将storm执行在yarn上后,Storm能够与其它计算框架(如mapreduce)共享整个集群的资源.这样当Storm负载骤增时,可动态为它添加计算资源. 负载减小时,能够 ...
- linux下安装dovecot
Dovecot是一个开源的,为Linux/Unix-like系统提供IMAP,POP3服务的软件.主要是为了安全产生的,不管大小应用,Dovecot都是一个非常优秀的选择.它非常快,配置简单,不需要专 ...
- 一直误解的memset函数
1.“想当然”导致的后果 今天犯了一个十分低级的错误,在对一个整型数组用memset进行初始化设置所有元素值为1.可是结果却大出所料,很意外啊!接着,我就做了代码测试. #include <io ...
- 同一种类型的两个对象赋值,用反射。再也不用点属性了。。。。(适用于ef)
/// <summary> /// 给对象赋值的方法(不赋地址)(同一个类型),含过滤 /// </summary> /// <typeparam name=" ...