Skip to content
阅读进度

内存泄漏与线程泄漏是一回事吗? ​

返回 性能与稳定性 目录

标准回答 ​

两者不是一回事。内存泄漏强调“不再需要的对象还被引用,无法回收”;线程泄漏强调“不再需要的线程或执行器还没结束”。线程可能同时持有页面对象,所以同一问题也可能造成两种泄漏。

  • 长期运行的线程可能持有 Activity,引发内存泄漏。
  • 无用线程也会消耗栈空间、调度资源或 CPU,但不一定持有 Activity。
  • 分别检查 heap 的引用链与线程数量、栈和任务生命周期。

通俗例子 ​

页面关了,轮询线程还在跑,这是线程生命周期没收好;如果线程还抓住 Activity,又会把页面内存一起留住。

深入解释 ​

**泄漏的对象不同:**内存泄漏是本应释放的对象仍被无用引用留住;线程泄漏是本应结束的线程或执行器继续存在、等待或运行,持续占用线程栈等资源。

**二者为什么经常一起出现:**页面创建线程却不退出,线程任务又持有页面,就同时浪费线程和保留 Activity。线程没泄漏也可能有静态集合导致的内存泄漏,因此要分别检查。

易混淆点 ​

二者会相互关联,但不能互相等同;取消任务也需要任务实现协作退出。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。