程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
长生命周期持有短生命周期对象引用,尽管短生命周期对象已经没有使用,但长生命周期一直持有短生命周期引用而导致不能回收,则导致内存泄露。
背包没有容量且很重,玩具熊对儿子来说,可能都不会拿出来占用空间,最后导致内存泄露。但儿子很聪明对玩具标记了颜色,发现不能装,取出带有绿色玩具熊(软引用 SoftReference内存不够都被回收),检查背包黄色标签标示(弱引用WeakReference 扫描管辖内存时)
常见内存溢出:
单例模式,单例往往生命周期都是整个应用生命周期,如果持有短生命周期容易出现内存泄漏,如Activity
静态变量,和application一样生命周期,需要我们评估占据空间大小
handler持有短生命周期,特别是匿名内部内,messagequeue持有,looper持有前者
匿名内部类持有外部类对象,如activity里面的内部类,如果匿名内部类做耗时是,无法释放外部对象
资源泄漏,数据库没有关闭,文件没有关闭,bitmap没有释放
最好是实现onDestory,把需要解绑注册的广播解绑
第三库传递一定是applicant的context
容器你装了fragment或者view,activity持有容器对象,最好在activity销毁是clear,不要等待垃圾回收器。
使用leakcanary+MAT工具检查内存
开发时一定注意在activity被fragment释放资源