文档章节

内存监测工具DDMS-->Heap

蜀山下的鱼
 蜀山下的鱼
发布于 2015/04/29 00:42
字数 804
阅读 5
收藏 0

无论怎么小心,想完全避免badcode是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方。Androidtools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使eclipseADT插件,并以真机为例,在模拟器中的情况类似)。用Heap监测应用进程使用内存情况的步骤如下:


1.启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的;


2.将手机通过USB链接至电脑,链接时需要确认手机是处于USB调试模式,而不是作为MassStorage


3.链接成功后,在DDMSDevices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息;


4.点击选中想要监测的进程,比如system_process进程;


5.点击选中Devices视图界面中最上方一排图标中的UpdateHeap图标;


6.点击Heap视图中的CauseGC按钮;


7.此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况


a)点击CauseGC按钮相当于向虚拟机请求了一次gc操作;


   b)当内存使用信息第一次显示以后,无须再不断的点击CauseGCHeap视图界面会定时刷新,在对应用的不断的操作过程中就可以看到内存使用的变化;


c)内存使用信息的各项参数根据名称即可知道其意思,在此不再赘述。

 

如何才能知道我们的程序是否有内存泄漏的可能性呢。这里需要注意一个值:Heap视图中部有一个Type叫做dataobject,即数据对象,也就是我们的程序中大量存在的类类型的对象。在dataobject一行中有一列是TotalSize,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断:


a)不断的操作当前应用,同时注意观察dataobjectTotalSize值;


b)正常情况下TotalSize值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;


c)反之如果代码中存在没有释放对象引用的情况,则dataobjectTotalSize值在每次GC后不会有明显的回落,随着操作次数的增多TotalSize的值会越来越大,直到到达一个上限后导致进程被kill掉。


d)此处已system_process进程为例,在我的测试环境中system_process进程所占用的内存的dataobjectTotalSize正常情况下会稳定在2.2~2.8之间,而当其值超过3.55后进程就会被kill

 

本文转载自:http://blog.csdn.net/caiwenfeng_for_23/article/details/23209787

蜀山下的鱼
粉丝 9
博文 405
码字总数 0
作品 0
广州
高级程序员
私信 提问
如何使用查看Android应用内存情况

一.使用ADB查看内存的使用情况: 1.查看指定内存使用情况 使用命令: adb shell dumpsys meminfo 应用包名 或者: adb shell showmap -a PID号 (adb shell showmap -a 2786) 只需要关注Activ...

zshzx
2017/02/09
0
0
Android 内存监测工具 DDMS --> Heap

用 Heap监测应用进程使用内存情况的步骤如下: 1. 启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的; 2. 将手机通过USB链接至电脑,链接时需要确认手机是处于“USB...

带梦想一7飞
2012/06/21
0
0
Android 内存监测工具 DDMS --> Heap

用 Heap监测应用进程使用内存情况的步骤如下: 1. 启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的; 2. 将手机通过USB链接至电脑,链接时需要确认手机是处于“USB...

晨曦之光
2012/03/01
1K
0
Android内存分析工具

Dalvik虚拟机支持垃圾收集,但是这不意味着你可以不用关心内存管理。你应该格外注意移动设备的内存使用,在上面内存空间是受到限制的。在这篇 文章里面,我们来看看Android SDK里面的一些内存...

鉴客
2012/03/09
11.4K
0
Android内存分析工具

Dalvik虚拟机支持垃圾收集,但是这不意味着你可以不用关心内存管理。你应该格外注意移动设备的内存使用,在上面内存空间是受到限制的。在这篇 文章里面,我们来看看Android SDK里面的一些内存...

晨曦之光
2012/03/01
570
0

没有更多内容

加载失败,请刷新页面

加载更多

android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
6分钟前
0
0
java 序列化和反序列化

1. 概述 序列恢复为Java对象的过程。 对象的序列化主要有两 首先我们介绍下序列化和反序列化的概念: 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。...

edison_kwok
17分钟前
0
0
分布式数据一致性

狼王黄师傅
59分钟前
1
0
经验

相信每位开发者在自己开发的过程中,都会反思一些问题,比如怎样提高编程能力、如何保持心态不砍产品经理、996 之后怎样恢复精力……最近开发者 Tomasz Łakomy 将他 7 年的开发生涯中学习到...

WinkJie
今天
4
0
从源码的角度来看SpringMVC

SpringMVC核心流程图 简单总结 首先请求进入DispatcherServlet 由DispatcherServlet 从HandlerMappings中提取对应的Handler 此时只是获取到了对应的Handle,然后得去寻找对应的适配器,即:H...

骚年锦时
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部