1. 问题现象与背景定位
在Android设备上进行4K 60帧视频录制时,我们通过内存监控工具发现了一个异常现象:camx进程的heap内存持续增长且不释放,最终导致系统内存占用超标。这个问题在高通平台设备上尤为明显,当连续录制超过3分钟后,内存消耗会从正常的800MB激增至1.5GB以上,严重时甚至触发OOM(Out Of Memory) killer机制终止录制进程。
通过Android Studio的Memory Profiler工具抓取的内存快照显示,内存泄漏集中在camx组件的heap分配区域。具体表现为:
- 每次开始新的视频录制会话时,都会创建新的heap分配
- 正常情况应在录制结束后释放这些内存
- 实际观察发现首次分配的内存块在会话结束后未被正确释放
这个问题在1080p分辨率下不易复现,但在4K 60帧的高负载场景下必现。通过adb shell dumpsys meminfo命令可以清晰看到camx进程的Native Heap增长曲线异常:
code复制Applications Memory Usage (in Kilobytes):
Uptime: 12345678 Realtime: 23456789
** MEMINFO in pid 1234 [camx] **
Pss Private Private SwapPss Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 85600 85500 100 200 102400 92300 10100
2. camx架构与内存管理机制
2.1 高通camx框架概述
camx是高通相机 HAL(硬件抽象层)的核心框架,采用模块化设计,主要包含以下关键组件:
- CHI-CDK:相机硬件接口层,负责与底层硬件交互
- **Pi
