Context
测试Android native malloc实际内存分配的体现
代码
- buttno点击一次调用一次分配
extern "C" JNIEXPORT void JNICALL
Java_com_albertsnow_graphicdemo_SecondActivity_mallocInt(
JNIEnv *env,
jobject thisParam) {
malloc(1024 * 1024 * 1);
}
- 调用
dumpsys meminfo com.albertsnow.graphicdemo | grep -E "Native Heap|Dalvik Heap|TOTAL"
我已经试验过一次,发现只有Native Heap 的改变
输出结果
- malloc分配前
Pss Private Private Swap Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 0 0 0 0 12288 9963 2324
Dalvik Heap 0 0 0 0 4952 2971 1981
TOTAL 0 0 0 0 17240 12934 4305
Native Heap: 0
TOTAL: 0 TOTAL SWAP (KB): 0
- 每次点击
malloc(1024 * 1024 * 1);
一次输出一次调用
Native Heap 0 0 0 0 16384 10688 5695
Dalvik Heap 0 0 0 0 4986 2992 1994
TOTAL 0 0 0 0 21370 13680 7689
Native Heap 0 0 0 0 18432 11866 6565
Dalvik Heap 0 0 0 0 4986 3003 1983
TOTAL 0 0 0 0 23418 14869 8548
Native Heap 0 0 0 0 20480 12861 7618
Dalvik Heap 0 0 0 0 4986 2999 1987
TOTAL 0 0 0 0 25466 15860 9605
Native Heap 0 0 0 0 22528 13961 8566
Dalvik Heap 0 0 0 0 4986 2992 1994
TOTAL 0 0 0 0 27514 16953 10560
Native Heap 0 0 0 0 24576 15013 9562
Dalvik Heap 0 0 0 0 4986 2992 1994
TOTAL 0 0 0 0 29562 18005 11556
Native Heap: 0
TOTAL: 0 TOTAL SWAP (KB): 0
Heap size 增量:
4096 | 2048 | 2048 | 2048 | 2048
Heap alloc增量:
725 | 1178 | 995 | 1100 | 1052
我malloc 1M,但实际增加的是1024byte * 4 = 4KB,也就是1个page的大小。,但之后都是2048也就是2K,这个就不太明白了
结论
- malloc不是申请多少内存,就分配多少,而是先分配一个page。可以理解,好比一个人吃午饭要100个馒头,我也只先给你上1个,吃完再给。
- Heap size= Heap alloc + Heap free