当前位置: 首页 > news >正文

Android 内存监测工具 DDMS

Android 内存监测工具 DDMS --> Heap

用 Heap监测应用进程使用内存情况的步骤如下:
1. 启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的;
2. 将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式,而不是作为“Mass Storage”;
3. 链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息;
4. 点击选中想要监测的进程,比如system_process进程;
5. 点击选中Devices视图界面中最上方一排图标中的“Update Heap”图标;
6. 点击Heap视图中的“Cause GC”按钮;
7. 此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况。
说明:
a) 点击“Cause GC”按钮相当于向虚拟机请求了一次gc操作;
b) 当内存使用信息第一次显示以后,无须再不断的点击“Cause GC”,Heap视图界面会定时刷新,在对应用的不断的操作过程中就可以看到内存使用的变化;
c) 内存使用信息的各项参数根据名称即可知道其意思,在此不再赘述。
  如何才能知道我们的程序是否有内存泄漏的可能性呢。这里需要注意一个值:Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断:
a) 不断的操作当前应用,同时注意观察data object的Total Size值;
b) 正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对 象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;
c) 反之如果代码中存在没有释放对象引用的情况,则data object的Total Size值在每次GC后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大,
  直到到达一个上限后导致进程被kill掉。
d) 此处已system_process进程为例,在我的测试环境中system_process进程所占用的内存的data object的Total Size正常情况下会稳定在2.2~2.8之间,而当其值超过3.55后进程就会被kill。

 

转载于:https://www.cnblogs.com/wang001/p/10700703.html

相关文章:

  • Go语言介绍
  • 多态的应用-例子
  • Redis实战 - 3.Hash
  • session的使用
  • C++ string使用
  • 外连接查询
  • C#中三层架构UI、BLL、DAL、Model实际操作
  • Opencart3.0 本地环境 前台无法提交订单
  • springcloud(六)-Ribbon配置自定义算法
  • NABCD分析---校园服务
  • go语言学习逻辑运算符if判断,iota的理解
  • actuator与spring-boot-admin 可以说的秘密
  • mongodb排序限制输出, 分组查询,爬虫连接mongodb
  • leetcode 刷题day1
  • Unity UGUI和特效(含粒子系统和3D Object)之间层级问题
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • canvas绘制圆角头像
  • Docker容器管理
  • Javascript基础之Array数组API
  • js作用域和this的理解
  • Mithril.js 入门介绍
  • MQ框架的比较
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • node入门
  • python docx文档转html页面
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python学习笔记 字符串拼接
  • Vue--数据传输
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 如何编写一个可升级的智能合约
  • 如何学习JavaEE,项目又该如何做?
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微信支付JSAPI,实测!终极方案
  • 我与Jetbrains的这些年
  • 原生 js 实现移动端 Touch 滑动反弹
  • 阿里云API、SDK和CLI应用实践方案
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • #ifdef 的技巧用法
  • #微信小程序:微信小程序常见的配置传旨
  • $.ajax中的eval及dataType
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (13)Hive调优——动态分区导致的小文件问题
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (30)数组元素和与数字和的绝对差
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)docker:Dockerfile构建容器运行jar包
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net 路由处理厉害了
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET6实现破解Modbus poll点表配置文件