内存测试

一、查看内存大小

查看单个应用程序最大内存限制的方式:

1.内存数据文件地址: android手机内部 system/build.prop

adb pull  system/build.prop 本地路径

打开该文件,查看对应的内存信息

内存测试_第1张图片

2.另一种查看方式,使用命令行

adb shell  getprop | grep heapgrowthlimit

得到对应的结果

[dalvik.vm.heapgrowthlimit]: [128m]

PS:当然adb shell  getprop 还有可以得到其他。build.prop文件中包含的数据应该都可以获取,还没有具体去使用。

二、查看内存的方式

adb shell dumpsys meminfo

结果如下:

内存测试_第2张图片

看到这个图,其实都不陌生了,但是具体该看什么呢?先简单分析下:

1.dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的。

2.native是被native堆使用的内存。应该指使用C\C++在堆上分配的内存。

所以我们查看的大小是 dalvik heap(单位为KB,注意换算)不能超过最大限制(heapgrowthlimit)

另外一些参数含义:

Naitve Heap Size: 从mallinfo usmblks获得,代表最大总共分配空间

Native Heap Alloc: 从mallinfo uorblks获得,总共分配空间

Native Heap Free: 从mallinfo fordblks获得,代表总共剩余空间

Native Heap Size 约等于Native Heap Alloc + Native Heap Free

mallinfo是一个C库, mallinfo 函数提供了各种各样的通过C的malloc()函数分配的内存的统计信息。

Dalvik Heap Size:从Runtime totalMemory()获得,Dalvik Heap总共的内存大小。

Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap分配的内存大小。

Dalvik Heap Free:从Runtime freeMemory()获得,Dalvik Heap剩余的内存大小。

Dalvik Heap Size 约等于Dalvik  HeapAlloc + Dalvik  Heap Free

我们关注主要就是 native和dalvik的heap size,通过自动化或手工测试,查看heap size 是否处于一直增长的状态,若一直增长,可能会出现oom的情况。

结果分析: 可以查看 https://developer.android.com/reference/android/os/Debug.MemoryInfo.html  具体字段意义

linux系统或者Android 系统内存大多是共享的,所以单独计算使用的内存是特别困难。 

1.pss:proportional set size  Pss数字是内核计算的衡量内存共享的度量标准,基本上每个页面的RAM都是通过使用该页面的其他进程的数量进行缩放。这样,您可以(理论上)将所有进程中的pss加起来,以查看它们正在使用的总RAM,并比较进程之间的pss,以了解它们的相对权重。

2.private Dirty:另一个有趣的指标是PrivateDirty,它基本上是不能被分页到磁盘的进程内的RAM量(它不受磁盘上相同的数据支持),并且不与任何其他进程共享。另一种看待这种情况的方法是当该过程消失时(可能很快将其纳入高速缓存和其他用途),RAM将可用于系统。

3.private Clean: 未找到合适的说明,猜测就属于未使用的私有的磁盘大小

4.Swapped Dirty:未找到合适的说明,猜测交换的磁盘控件的大小

三、Memory Monitor

前提:一定是debug 的包,release的包无法查看

内存测试_第3张图片

可参考该文章进行内存泄漏操作查看

http://www.cnblogs.com/linguanh/p/5601232.html 

具体可查看https://developer.android.com/studio/profile/am-hprof.html?#hprof-snapshot

https://developer.android.com/studio/profile/am-allocation.html,英文水平不佳,准备开始翻译

你可能感兴趣的:(内存测试)