【转】android IDE——通过DDMS查看app运行时所占内存情况

Android内存优化方面,我们不可能做到没有大内存的占用情况。

所以有时候要清楚我们的app到底占用了多少内存,哪一步操作占用了多少的内存。

这时候,android的ddms中提供了一个工具,是可是实时查看app运行时的内存使用情况。

下面我以android studio为例。其实eclipse adt 是一样的。

eclipse中也是这个图标。

如何使用,图中已经表明的很清楚了。 
1,找到当前运行的手机 
2,点击和你app相同包名的进程 
3,点击update Heap 
4,切换到Heap视图上点击Cause GC按钮 
5,根据自己需要点击app进程 
6,图中的柱状图就是你的app的内存使用情况了

我们可以根据哪一步操作对内存的使用情况而锁定应该优化的地方。

注意事项: 
1,Cause GC按钮点击一次就相当于虚拟机请求了一次gc操作 
2,当内存信息显示后就不需要再点击Cause GC按钮了。Heap视图会定时刷新,对应的操作过程可以看出内存变化。

如何知道程序内存泄漏? 
Heap视图中有一行数据是叫data object,即数据对象。它是我们app中大量存在的类类型的对象。 
在data object中有一列 Total Size ,它的值就是当前进程中所有Java对象的内存总量。 
一般情况下,这个值决定是否内存泄漏。

如何判断? 
1,不断的操作你的app,同时观察Total Size的值。 
2,Total Size的值一般会稳定在一个正常范围内。 
3,当我们在不断操作app的时候,内存会有一个先增加(不断的生成对象),后下降(对象被回收)。如果程序的代码处理良好,那么内存占用量会有一个明显的回落,并且稳定在一个正常水平。 
4,如果你的代码没有很好的释放内存。那么,内存占用量就没有一个明显的回落,并且会越来越高,最终达到上限程序被kill掉。

如何处理? 
当我们发现内存泄漏了,我们需要怎么做? 
一般情况下,我们对自己写的代码了如指掌,可以根据逻辑去判断,当前操作是哪里造成了内存泄漏。然后分析,修改。

但是,如果你在修改别人的代码的时候,这样会把你逼疯的。这里介绍一个工具:内存分析工具MAT(Memory Analyzer Tool),在eclipse中能够当作插件使用。android studio目前我还没试过。不过有客户端。 
下载地址和使用详情见:www.eclipse.org/mat

from:http://blog.csdn.net/yehui928186846/article/details/51387079

时间: 2024-10-08 20:27:09

【转】android IDE——通过DDMS查看app运行时所占内存情况的相关文章

Android Gradle编译so库或运行时出现 text relocations 崩溃的正确解决方法

1.so库编译时出现 这种情况一般是使用了新版的NDK编译造成的,新版的ndk将warning视为error, 解决方法: 在Android.mk里面加入#LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true 这种方法编译的so库不能运行在target api为23以上的机器. 2.Android运行时崩溃提示 这种情况主要是因为从 API 23 开始,共享对象将不得包含文本重定位.也就是说,代码必须按原样加载,不得对其进行修改.这种方法减少了加载时间,并提高了

运用HSDB查看jvm运行时数据

HSDB是JDK自带的查看jvm运行时数据的图形化工具. 启动过程如下: 运行cmd,输入  java -classpath "D:\soft\jdk\jdk1.7/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB 弹出 找到需要监控的jvm进程,输入进程ID.点击Ok,弹出 工具栏tools ClassBrowser 可以查看jvm加载的类Memory Viewer可以查看内存 遇到的错误: 在jdk目录下找到sawindbg.dll,复制粘贴到报错的目录下.

android: DOC命令:查看后台运行的activity:

DOC命令:查看后台运行的activity: adb shell dumpsys activity running activity: 模拟器曾经运行过的 activity:

ios 性能优化之app运行时数据收集

收集你的应用程序数据 来帮助您监控和提高你的应用程序,它能够收集信息在您的应用程序正在运行. 本章描述了如何直接工具来收集关于应用程序的信息. 注意: 你的设备之前必须提供开发工具可以收集数据. 看到 配置你的iOS设备的发展 . 设置数据收集与目标弹出菜单 目标导航栏弹出菜单是用于设置设备收集的数据和应用程序或过程你将在收集数据. 点击弹出菜单让你选择目标. 目标弹出菜单为您提供三个选择收集数据: 所有进程. 收集数据从当前系统上运行的所有进程. 附加到进程. 收集数据从您选择的当前运行的进程

利用jmap和MAT等工具查看JVM运行时堆内存

jmap JDK自带了一些工具可以帮助我们查看JVM运行的堆内存情况,常用的是jmap命令 jmap -heap <pid> 打印堆的使用情况 那么,从这个输出中我们也可以大致看出堆的结构,分为Young Generation (年轻代) 和 Old Generation (老年代) Young Generation又被划分为:Eden Space , From Space 和 To Space 可以看到这里To区是干净的,还未被使用,From区已经使用了95%了 jmap -histo[:l

程序运行时三种内存分配策略

按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求. 栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未

Unity运行时检测Altas使用情况

UI贴图在游戏中内存大小中占的分量非常非常大,尤其对于前期对UI没有规划的项目,无论是包量还是内存大小都是需要花费很多时间去优化.如果涉及到战斗场景和逻辑场景的情况下,常用的做法就是把两个场景使用的atlas严格的分离开,这样可以减少运行时内存,特别是在战斗中,内存增加的比较厉害.OK,如果项目前期这方面的事情考虑比较周全.规则比较详细.执行也比较到位,后期可能就做这个事情就比较简答.那如果出现战斗中引用不该有的atlas怎么办?UI太多的情况下,逐个排除太麻烦,尤其是不在UI中,只是静态引进的

android studio 菜单中的app运行按钮上有个叉号,原因与解决办法(自己去百度)

http://blog.csdn.net/sz0268/article/details/51706397 : 在Android studio写代码中,直接建立项目,写代码然后运行是不会一般是不会出现这样的问题的,但是一旦更改主Activity,而不跟着手动更改AndroidManifest.xml中的activity配置,则会出现这样的情况,这就是提醒我们没有了主Activity.手动将主Activity的子节点<intent-filter>.<action>和<catego

android新bug,解析app配置文件时出错

1. 下面这段manifest代码,你可以扔到你的某个activity中去,然后跑一下这个app,看看效果 <intent-filter> <action android:name="android.intent.action.VIEW"/> <data android:mimeType="*/*"/> <data android:host="*"/> <data android:scheme