Tools-WorkFlow-Debugging-investigate Your RAM usage

      因为Android是为移动设备设计的操作系统,所以你应该经常关心你app使用的RAM。虽然Android的Dalvik虚拟机执行了例常的垃圾回收,但是这并不意味着你可以忽视内存的分配和释放,为了提供稳定的用户体验和系统在各个app之间快速的切换,减少当用户不与程序进行交互时的不必要的内存消耗非常重要。

解释日志信息

      开始监视你app内存应用的最简单的方式是Dalvik日志信息。你可以在Logcat看到日志。

      每次垃圾回收发生时,Logcat打印具有以下信息的日志:

D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats>, <Pause_time>

<GC_Reason>

什么触发了何种垃圾回收,包含以下信息:

      GC_CONCURRENT 一个并行的垃圾回收,当你的对将要满是释放内存

      GC_FOR_MALLOC  在你对内存满的时候你的app试图分配内存,所以系统不得不停止 你的app回收内存

      GC_HPROF_DUMP_HEAP 当你创建HPROF文件来分析你的堆时

      GC_EXPLICIT 呼叫GC时(你应该避免在代码中呼叫GC,充分相信垃圾回收机制)

      GC_EXTERNAL_ALLOC 只在API10一下才会发生

<Amount_freed>

此次垃圾回收了多少内存

<heap_stats>

释放百分比和对象数量/对内存大小

<External_memory_stats>

API10以下用到

<Pause_time>

所需时间,开始回收时+即将结束时

例如:
D/dalvikvm( 9050): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms

      这些日志信息整合到一块,查看堆内存状态(上面例子中是3571/9991k),如果这个数值一直增长没有变小的迹象,那就有可能出现内存泄露

查看堆更新

 要活的您的应用程序时使用什么样的内存时,你可以在设备检查器(DeviceMonitor)查看您应用程序实时的堆内存情况。

1,打开设备查看器(DeviceMonitor)
打开你的<sdk>/tools/目录,启动monitor工具。
2,在设备查看器窗口,从左边的列表中选择你的app进程
3,点击进程列表上面的UpdateHeap按钮
4,在右边的面板,算则Heap选项卡
Heap选项卡显示了一些关于堆内存使用的基本信息,这些信息会随着每次垃圾回收而更新,点击CauseGC按钮就会看到第一次更新。

继续跟你的app交互,查看每次垃圾回收后堆内存分配的变化情况。这能帮助你定位app中的哪些动作会占用高过多的内存,以及在什么地方你应该减少内存非配和释放资源。

追踪分配

当你开始缩小内存问题时,你应该使用AllocationTracker来更好的理解其中的占用内存的对象是如何分配的。AllocationTracker不光对查看具体的内存使用有用,而且可以分析应用程序,例如滚动的关键代码路径。

如何用AlloationTracker:

1,打开DeviceMonitor

2,在DDMS窗口,在左边的列表中选择你app的进程

3,右边选择AllocationTracker面板

4,点击StartTracking

5,与你的app互动来执行逆向分析的代码路径。

6,点击GetAllocation,更新内存分配列表

列表显示了所有最近的分配,目前由512项环形缓冲区限制。点击其中一行 ,即可查看导致内存分配的堆栈跟踪。这些跟踪信息不光显示了哪种类型对象的内存分配,并且在那个线程,哪个类,哪个文件哪一行都有详细的跟踪。


虽然不是万能的,但是AllocationTracker能够协助你定位一些你代码中的问题,例如,一些app会在每次draw的时候new一个paint对象,把这个对象设置成全局的成员变量回事一中很好的解决方法。

查看总体内存分配

占位

捕捉堆转储

占位

触发内存泄露

占位

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值