外观
内存泄漏 GC 和低内存杀进程怎样区分?
标准回答
内存泄漏是本该释放的对象仍被引用,常见原因包括静态持有 Activity、未注销监听和延迟任务引用。GC 是运行时回收可达性已消失对象的过程,频繁分配也可能触发更多 GC 和部分暂停,但不是每次 GC 都表示泄漏。lmkd 等系统机制则可能在内存压力下选择终止进程。我会分别分析 heap dump 的引用路径、分配与 GC 时间线、dumpsys meminfo 的 Java 与 Native 内存,以及系统低内存相关记录,避免只看 Java heap 就忽略图形或 Native 占用。
延伸追问
Handler 泄漏要追到仍排队的消息或持久对象如何持有 Activity,不能简单说所有非静态 Handler 必然泄漏。
内容来源
- Android Framework 知识手册 · 原条目
7-5