购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 Native内存泄漏检测

Native内存泄漏的主要原因是so库中的代码调用malloc函数申请了内存,但是在业务结束之后却没有调用free函数对内存进行释放,随着程序的运行,泄漏的内存越来越多,最终会因内存消耗过大而导致程序异常。

想要检测Native内存泄漏,通常要拦截so库中的malloc函数和free函数,并插入我们自己的逻辑来统计malloc与free的内存大小。如果某个so库申请的内存减去释放的内存超过我们设置的阈值,便认为这个so库发生了内存泄漏。

这里看一个示例程序,其Native层异常申请了接近95MB的内存空间,如图2-12所示,笔者将这个Native代码打包成了example.so库。

图2-12 异常申请Native内存

我们接着在上层的Activity中加载这个so库,并调用该方法,便可以模拟一个异常的Native内存申请的场景,如图2-13所示。下面就通过这个示例程序来逐步排查这个异常的Native内存申请,从而帮助读者掌握Native内存泄漏检测的技术和步骤。

图2-13 调用异常Native函数 plIzGs4aERCdoIEpWrpAWTnW7rSzc2Tle0ujItLsSQC4MLRtv7tOmdlDy4lv6Vxg

点击中间区域
呼出菜单
上一章
目录
下一章
×