Native内存泄漏一步查

本文介绍了Android应用在64位架构下仍可能出现虚拟内存不足的问题,尤其是长时间运行时。文章详细解析了Android N引入的libmemunreachable库,用于检测native内存泄漏。通过GetUnreachableMemory、Root对象、CollectAllocations和DetectLeaks等方法,分析内存是否可达,从而找出内存泄漏的原因。并提供了如何利用libmemunreachable进行内存泄漏检测的方法。
摘要由CSDN通过智能技术生成

目录

虚拟内存也会被耗尽

libmemunreachable

GetUnreachableMemory

Root对象

CollectAllocations

DetectLeaks

使用libmemunreachable


虚拟内存也会被耗尽

作为Android开发者的我们,一定经历过APP从32位从64位架构的切换。目前国内市场还是存在32架构的要求的,并没有全面禁止,32位架构有一个缺点是,可分配给用户空间的虚拟内存太少了(一般一半留给内核空间,可配置)所以往往导致虚拟内存不足引发OOM。切换成64位架构后,在ARM64上,4kb的页大小情况下默认能分配给进程的虚拟内存大小是2^39次方,其实64位并不能完全分配完,但是39次方这个量级依旧比32位可用的虚拟内存大小大得多,因此往往我们升级为64位架构适配后,虚拟内存不足的问题会被缓解 ,这里比较有意思的是,只是缓解,如果你的应用是长时间存在的话,依旧会触发到因为虚拟内存不足导致的OOM,即使虚拟内存很大了,比如存在大量虚拟内存泄漏的情况。

我们可以看到的例子,比如mmap分配失败了,因为native Thread创建需要mmap创建一层栈空间,又或者是其他调用mmap分配内存时失败

 
java.la
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2024高教社杯思路代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值