Android 如何释放native内存,Android native内存分配2.0-private dirty memory不回收

本文探讨了在Android中如何释放native内存,尤其是针对malloc分配内存后释放但Private Dirty内存未减少的问题。通过adb shell dumpsys meminfo和Android Studio Profiler分析,发现在特定进程状态下系统可能有不同的内存回收策略。实验表明,当内存分配使用mmap而非malloc时,内存管理效果更佳。此外,进程的Private和Public内存以及Dirty状态也会影响内存回收,脏内存通常在进程状态改变时如亮灭屏后才被回收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Context

情景:

在C++中用 malloc申请内存

用申请的内存读取 模型文件

释放内存,AndroidStudio的Profiler显示内存大小不变

分析工具

adb shell dumpsys meminfo com.albertsnow.graphicdemo分析

Android Studio的profiler功能

输出形式

//仅用于数据名称演示,非本case的实际dump信息

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内存分配在Private dirty部分,release后 Heap size已经下降,但是Private Dirty并没有下降。导致进程dump出的实际占用 内存不变

额外的实验现象:

手机亮灭屏后,dirty内存会被回收

该加载逻辑在Service中,Service在独立于应用包名进程的单独进程中。但将该逻辑移到主进程中,dirty也会被回收

推测:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值