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