Android native記憶體分配1.0-
阿新 • • 發佈:2019-02-16
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
