赞
踩
Android提供了一个名为meminfo的小工具帮助应用分析自身的内存占用,并且在4.4还新增了memtrack HAL模块,SoC厂商通过实现memtrack模块,让meminfo可以获取GPU相关的一些内存分配状况。了解meminfo的实现,对我们更深入了解应用的内存占用状况是很有帮助的。而这篇文章的目的就是分析Android 4.4 meminfo的内部实现源码,让开发者通过这些信息可以更了解自己应用的内存占用状况。
在控制台输入命令"adb shell dumpsys meminfo YOUR-PACKAGE-NAME",可以看到类似下图的结果:
-
- ** MEMINFO in pid 14120 [com.UCMobile.test] **
- Pss Private Private Swapped Heap Heap Heap
- Total Dirty Clean Dirty Size Alloc Free
- ------ ------ ------ ------ ------ ------ ------
- Native Heap 187886 187872 0 0 325232 174093 38594
- Dalvik Heap 24801 24444 0 0 41476 35899 5577
- Dalvik Other 700 700 0 0
- Stack 508 508 0 0
- Other dev 33564 32600 4 0
- .so mmap 9019 1244 7268 0
- .apk mmap 101 0 16 0
- .ttf mmap 1330 0 696 0
- .dex mmap 2248 0 2248 0
- code mmap 985 0 188 0
- image mmap 1182 908 12 0
- Other mmap 130 4 108 0
- Graphics 25504 25504 0 0
- GL 2196 2196 0 0
- Unknown 32476 32476 0 0
- TOTAL 322630 308456 10540 0 366708 209992 44171
实际的调用代码入口在android.os.Debug.java和对应的CPP文件android_os_Debug.cpp,Debug.java的getMeminfo方法实际上调用了android_os_Debug.cpp的android_os_Debug_getDirtyPagesPid方法。
-
- static void android_os_Debug_getDirtyPagesPid(JNIEnv *env, jobject clazz,
- jint pid, jobject object)
- {
- stats_t stats[_NUM_HEAP];
- memset(&stats, 0, sizeof(stats));
-
- load_maps(pid, stats);
-
- struct graphics_memory_pss graphics_me
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。