[性能优化]再谈内存泄漏

2021-05-07  本文已影响0人  qiHuang112

前言

之前写过一篇文章简要谈了下内存泄漏的产生以及解决方式,今天再来谈谈内存泄漏。

内存泄漏如何产生

生命周期长的对象持有了生命周期短的对象的引用,导致生命周期短的对象在应该销毁的时候并没有销毁

内存泄漏会带来什么问题

对于一个APP而言,偶尔一两个内存泄漏不会有明显的现象。我们可以将内存泄漏按照严重程度分为三个阶段

内存泄漏如何定位

引入LeakCanary,在运行的过程中,它会自动帮你收集。

内存泄漏如何解决

从产生原因思考解决方案,明显有两种方式:

一个内存泄漏的小例子

单例持有Activity或有Activity inflate出来的view的引用。

更进一步

有时候会发现内存并没有泄漏,但是LeakCanary告诉你,有些Class never GC but not Leaked。这种就可能是因为在修复内存泄漏问题的时候,使用的是修改生命周期的方式,将被引用对象的生命周期延长了,虽然看起来确实没有内存泄漏了,但是本质上并没有解决问题,因为常驻内存增加了。这种情况下咱们还是不要改对象的生命周期为好,尽量使用弱引用的方式来代替。

上一篇 下一篇

猜你喜欢

热点阅读