Android开发响应检测及内存分析 - 【Heap】

来源:互联网 发布:联合办学的网络教育 编辑:程序博客网 时间:2024/06/04 22:31

Heap监测应用进程-内存使用情况

1. 启动eclipse后,切换到DDMS透视图

2. 连接手机确认手机是处于“USB调试”模式

3. 点击选中想要监测的进程并点击选中Devices视图界面中最上方一排图标中的“Update Heap”图标(如下图)

4. 点击Heap视图中的“Cause GC”按钮(清理内存,一次即可),内存的相应数据就会显示


一句话概括数据的意思:当前堆内存大小为23.508M,已分配内存15.306M,共释放8.202M内存,当前堆内存使用率65.11%,内存中对象总数为81168个(好多啊…)。

       通常情况下Heap窗口提供的参数中ABCD四个数据最直观的体现出当前应用的状况。

 

A:Android 的图片(也就是Bitmap) 通常以Byte[]形态在内存中,假设应用在运行过程中,A行的Count和Total Size值一直处于上升状态,没有回落,这是可以考虑应用的关于图片内存是否得到很好的管理和释放,否则到达一个上限后导致OOM(内存溢出)。

 

B:data object,即数据对象,也就是程序中大量存在的类,类型的对象。dataobject的数值主要体现了应用中内存对象的数值状况。data object一行中的“Total Size”列,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。如上图所示:数据对象52867个占用内存2M,当然没有A处Byte[]占用的内存大。如果程序在不断的运行中,data object的Total Size数值也不断增加,即使退出应用或者点击GC按钮,数值依然不会有明显回落,那么可以考虑程序中是否存在内存泄露的可能?!

C:当前内存的使用率,不多说,当然这个值是越低越好了,个人所见优秀的应用的Usd值都会保持在50%~75%,而且都是以一个中间值上下浮动。

D:当前内存对象的总数。

总之Heap视图可以直接的告诉我们,正常情况下各值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;反之如果代码中存在没有释放对象引用的情况,则Objects 和data object、1-byte array的Total Size值在每次GC后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大。



0 0
原创粉丝点击