编译完Android源码后,会得到两个bionic动态C库,libc.solibc_debug.so,为了能够检测内存泄漏,我们应该首先在Androidrootfs中用libc_debug.so替换libc.so。在libc_debug.so库中,Android隐藏了两个可以用来检测内存泄漏的API

void get_malloc_leak_info(uint8_t** info, size_t* overallSize, size_t* infoSize, size_t* totalMemory, size_t* backtraceSize);
void free_malloc_leak_info(uint8_t* info);

其中,info是我们分配的一块内存。overallSizeinfo的大小。infoSize是一个single entry的大小。totalMemory是我们跟踪的所有内存分配的总和,不包括heapbacktraceSizeback trace中的entry的最大数量。

我们可以在程序的开始和结束分别调用get_malloc_leak_info,然后比较差异,如果有什么不同,说明可能有内存泄漏。

因为C++new/delete也是基于Cmalloc/free的,所以这个方法也可以检测出C++的内存泄漏。

如果你想知道bionic是如何实现这个功能的,可以参考bionic/libc/bionic/memory_leak.c

如果想知道怎么样使用这个功能,可以参考frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp

你也可以像下面这样获取mediaplayer的内存使用信息:

#dumpsys media.player –m

更多相关文章

  1. android:installLocation简析
  2. Android(安卓)API 人脸检测(Face Detect)
  3. Android操作framebuffer[zz]
  4. [android] 保存文件到手机内存
  5. android 图片溢出问题2...[geoway]
  6. Android(安卓)内存泄漏
  7. Android中检测手机制式和移动网络类型
  8. 获取android手机基本信息
  9. 在android中创建bitmap避免内存不足的方法

随机推荐

  1. android之【本地通知Notification】
  2. Android的Layout及其Param
  3. Android(安卓)Fragment使用和切换 笔记
  4. android 图片自动切换
  5. Android雪花特效 - 自定义View
  6. android 自定义圆形的ImageView
  7. 安卓模拟器Android(安卓)SDK安装完整图文
  8. android SearchView 失去焦点
  9. android javamail客户端获取慢_Android面
  10. Google Android(安卓)Hidden Secret Code