移动端专项之内存测试教程
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
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帧率,会感觉卡顿,帧率越高越无法感知