移动端专项之内存测试

  1 Applications Memory Usage (in Kilobytes):
  2 Uptime: 20697414 Realtime: 79428706
  3 --在会话列表页面
  4 ** MEMINFO in pid 10184 [com.mobile] **
  5                    Pss  Private  Private  SwapPss     Heap     Heap     Heap
  6                  Total    Dirty    Clean    Dirty     Size    Alloc     Free
  7                 ------   ------   ------   ------   ------   ------   ------
  8   Native Heap    34431    34300        0        0    47616    32803    14812
  9   Dalvik Heap     5410     5176        0        0    11195     7099     4096
 10  Dalvik Other      861      856        0        0
 11         Stack      720      720        0        0
 12        Ashmem      130      128        0        0
 13       Gfx dev    15980    13204        0        0
 14     Other dev        4        0        4        0
 15      .so mmap    24249      520    22100        0
 16 
 17 
 18 
 19 
 20 Applications Memory Usage (in Kilobytes):
 21 Uptime: 20770874 Realtime: 79502166
 22 --进入会话详情,持续向上划动获取消息,消息中有大量表情,URL地址等,消息较多
 23 ** MEMINFO in pid 10184 [com.mobile] **
 24                    Pss  Private  Private  SwapPss     Heap     Heap     Heap
 25                  Total    Dirty    Clean    Dirty     Size    Alloc     Free
 26                 ------   ------   ------   ------   ------   ------   ------
 27   Native Heap    50571    50440        0        0    60928    53310     7617
 28   Dalvik Heap     6685     6460        0        0    15305     7113     8192
 29  Dalvik Other     1068     1064        0        0
 30         Stack      860      860        0        0
 31        Ashmem      130      128        0        0
 32       Gfx dev    57176    52920        0        0
 33     Other dev        4        0        4        0
 34      .so mmap    24737      524    22580        0
 35 
 36 
 37 --回到会话列表页面
 38 ** MEMINFO in pid 10184 [com.mobile] **
 39                    Pss  Private  Private  SwapPss     Heap     Heap     Heap
 40                  Total    Dirty    Clean    Dirty     Size    Alloc     Free
 41                 ------   ------   ------   ------   ------   ------   ------
 42   Native Heap   109394   109264        0        0   123136   110632    12503
 43   Dalvik Heap    10744    10520        0        0    16409     8221     8188
 44  Dalvik Other     1736     1732        0        0
 45         Stack     1380     1380        0        0
 46        Ashmem      130      128        0        0
 47       Gfx dev    98794    94316        0        0
 48     Other dev        8        0        8        0
 49      .so mmap    28303      548    25728        0
 50 
 51 
 52      ** MEMINFO in pid 10184 [com.mobile] **
 53                    Pss  Private  Private  SwapPss     Heap     Heap     Heap
 54                  Total    Dirty    Clean    Dirty     Size    Alloc     Free
 55                 ------   ------   ------   ------   ------   ------   ------
 56   Native Heap   144756   144616        0        0   166144   148024    18119
 57   Dalvik Heap    12567    12328        0        0    16212     8020     8192
 58  Dalvik Other     2148     2144        0        0
 59         Stack     1364     1364        0        0
 60        Ashmem      130      128        0        0
 61       Gfx dev    98536    93936        0        0
 62     Other dev        8        0        8        0
 63      .so mmap    28990      564    26068        0
 64     .jar mmap        0        0        0        0
 65     .apk mmap     3740      104       16        0
 66     .ttf mmap      824        0      444        0
 67     .dex mmap     7714       12     7168        0
 68     .oat mmap     4686        0     1768        0
 69     .art mmap     2240     1156      284        0
 70    Other mmap      140        4       12        0
 71    EGL mtrack    16656    16656        0        0
 72     GL mtrack    54540    54540        0        0
 73       Unknown   239484   239476        0
 74 
 75 --继续进入上述同一个会话详情页面,再次不断下拉消息,内存不断增加,这时开始卡顿
 76       ** MEMINFO in pid 10184 [com.mobile] **
 77                    Pss  Private  Private  SwapPss     Heap     Heap     Heap
 78                  Total    Dirty    Clean    Dirty     Size    Alloc     Free
 79                 ------   ------   ------   ------   ------   ------   ------
 80   Native Heap   185008   184868        0        0   209664   191427    18236
 81   Dalvik Heap    12063    11824        0        0    16236     8044     8192
 82  Dalvik Other     1988     1984        0        0
 83         Stack     1396     1396        0        0
 84        Ashmem      130      128        0        0
 85       Gfx dev    98732    94104        0        0
 86     Other dev        8        0        8        0
 87      .so mmap    29237      564    26292        0
 88     .jar mmap        0        0        0        0
 89     .apk mmap     3730      104       16        0
 90     .ttf mmap      824        0      444        0
 91     .dex mmap     7448       12     7200        0
 92     .oat mmap     4755        0     1824
 93 
 94 
 95 --回到会话列表,内存还未释放,仍在不断增加
 96     ** MEMINFO in pid 10184 [com.mobile] **
 97                    Pss  Private  Private  SwapPss     Heap     Heap     Heap       Private Dirty  
 98                  Total    Dirty    Clean    Dirty     Size    Alloc     Free
 99                 ------   ------   ------   ------   ------   ------   ------
100   Native Heap   171620   171480        0        0   210432   173822    36609
101   Dalvik Heap     9947     9708        0        0    12058     7962     4096
102  Dalvik Other     1656     1652        0        0
103         Stack     1392     1392        0        0
104        Ashmem      130      128        0        0
105       Gfx dev    79412    75536        0        0
106     Other dev        8        0        8        0
107      .so mmap    29237      564    26292        0
108     .jar mmap        0        0        0        0
109     .apk mmap     3635      104       16        0
110     .ttf mmap      824        0      444        0
111     .dex mmap     7448       12     7200        0
112     .oat mmap     4756        0     1824        0
113     .art mmap     2256     1160      296        0
114 
115 
116 应用退到后台,内存未减:安卓系统会先回收长时间未用的后台应用,并不是退到后台就立马回收
117     ** MEMINFO in pid 10184 [com.mobile] **
118                    Pss  Private  Private  SwapPss     Heap     Heap     Heap
119                  Total    Dirty    Clean    Dirty     Size    Alloc     Free
120                 ------   ------   ------   ------   ------   ------   ------
121   Native Heap   173787   173648        0        0   211968   178683    33284
122   Dalvik Heap     6655     6416        0        0    16157     7965     8192
123  Dalvik Other     1716     1712        0        0
124         Stack     1368     1368        0        0
125        Ashmem      130      128        0        0
126       Gfx dev    80362    76076        0        0
127     Other dev        8        0        8        0
128      .so mmap    29237      564    26292        0
129     .jar mmap        0        0        0        0
130     .apk mmap     3635      104       16        0
131     .ttf mmap      824        0      444        0
132     .dex mmap     7448       12     7200        0
133     .oat mmap     4756        0     1824        0
134     .art mmap     2256     1160      296        0
135 
136 杀掉进程
137 ** MEMINFO in pid 14593 [com.mobile] **
138                    Pss  Private  Private  SwapPss     Heap     Heap     Heap
139                  Total    Dirty    Clean    Dirty     Size    Alloc     Free
140                 ------   ------   ------   ------   ------   ------   ------
141   Native Heap    30695    30548        0        0    39936    32328     7607
142   Dalvik Heap     6672     6420        0        0    15262     7070     8192
143  Dalvik Other     1006     1000        0        0
144         Stack      672      672        0        0
145        Ashmem      130      128        0        0
146       Gfx dev    10664     5456        0        0
147     Other dev        4        0        4        0
148      .so mmap    22426      492    20400        0
149     .jar mmap        0        0        0        0
150     .apk mmap     3636      104       24        0
151     .ttf mmap      342        0      120        0
152     .dex mmap     6168        8     5932        0
153     .oat mmap     3299        0      852        0
154     .art mmap     1667      872       52

上述用例操作中开发在会话详情页面下拉消息后返回会话列表,未把该释放的内存释放掉,导致不断切换页面后应用卡顿

Private Dirty
私有(Clean and Dirty) 内存

进程独占的内存。也就是应用进程销毁时系统可以直接回收的内存容量。通常来说,“private dirty”内存是其最重要的部分,因为只被自己的进程使用。它只在内存中存储,因此不能做分页存储到外存(Android不支持swap)。所有分配的Dalvik堆和本地堆都是“private dirty”内存;Dalvik堆和本地堆中和Zygote进程共享的部分是共享dirty内存。

实际使用内存 (PSS)
这是另一种应用内存使用的计算方式,把跨进程的共享页也计算在内。任何独占的内存页直接计算它的PSS值,而和其它进程共享的页则按照共享的比例计算PSS值。例如,在两个进程间共享的页,计算进每个进程PPS的值是它的一半大小。
通常来说,只需关心Pss Total列和Private Dirty列就可以了

Android设备出厂以后,Java虚拟机对单个应用的内存分配就固定下来了,超出这个值就会OOM(内存泄露)。
这个属性值定义在 /system/build.prop中
dalvik.vm.heapgrowthlimit=192m // heapgrowthlimit参数表示单个应用最大可用内存
dalvik.vm.heapsize=512m // heapsize参数表示单个进程可用的最大内存

这表示单个应用最大可用内存是192m,超出就会报OOM。这个内存溢出是针对dalvik堆而言,而不是native堆
heapsize表示不受控情况下的极限堆,表示单个进程可用的最大内存。但如果存在heapgrowthsize参数,则以heapgrowthsize定义为最大内存。

android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的优点就是在单个程序崩溃的情况下不会导致整个系统的崩溃。

内存泄露
概念:内存泄露就是指,本应该回收的内存,还驻留在内存中

何时触发:一般情况下,高密度的手机,一个页面大概就会消耗20M内存,如果发现退出界面,程序内存迟迟不降低的话,可能就发生了严重的内存泄露。


怎么主动触发内存泄露:

就是在检查堆之前先运行一会。泄露会慢慢达到分配堆的大小的上限值。当然,泄露越小,就要运行应用越长的时间来复现。

也可以使用下面的方法来触发内存泄露:

1.在不同Activity状态时,重复做横竖屏切换操作。旋转屏幕可能导致应用泄露 Activity、Context 或 View对象,因为系统会重新创建 Activity,如果应用在其它地方持有这些对象的引用,那么系统就不能回收它们。

2.在不同Activity状态时,做切换应用操作(切换到主屏幕,然后回到应用中)。

3、查看操作前后的堆数据,看是否有内存泄漏 对单一操作(比如添加页,删除页)进行反复操作,如果堆的大小一直增加, 则有内存泄漏的隐患。

3、应用打开,多打开一些页面,会话列表要具多,来很多消息的时候,手机装很多应用,退到后台就可以了
4、图片,视频,动图,音频视耗内存,
3、低于24帧率,会感觉卡顿,帧率越高越无法感知

三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
原文地址:https://www.cnblogs.com/deeptester-vv/p/14418619.html