外观
内存泄漏 线程泄漏 OOM 和 GC Root 是什么?
标准回答
内存泄漏是已经不再需要的对象仍被可达引用保留;线程泄漏是应结束的线程或任务持续存在;OOM 是内存分配失败,可能由泄漏、峰值过高、大对象或其他资源压力导致。GC Root 是垃圾回收可达性分析的起点,例如线程栈引用、静态引用所关联的根和 JNI 引用等。(Java 内存分析)
机制解释
线程泄漏会占用栈、调度和其他资源,也可能通过 Runnable 留住 Activity,进而形成内存泄漏,但两者不是同一概念。排查时复现进入退出循环,观察对象数量与内存曲线,用 heap dump 找到从根到泄漏对象的引用链。
延伸追问
缓存也属于泄漏吗?有边界、有淘汰策略的缓存是主动保留;长期无界增长或错误保留页面会变成问题。Bitmap 要按显示尺寸采样与合理缓存,不要寄希望于频繁调用 System.gc 来解决设计问题。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q61