美文网首页工作
Android内存泄漏和内存溢出详解

Android内存泄漏和内存溢出详解

作者: 码农MM | 来源:发表于2017-03-01 15:22 被阅读0次

    什么是内存泄漏和内存溢出

    内存泄漏(Memory Leak):指的是程序在申请内存空间之后,无法释放已占有的空间,虽然一两次内存泄漏并不会对程序造成什么大的影响,但是内存泄漏的堆积会导致程序崩溃.

    内存溢出(OutOfMemory):指的是程序申请内存的时候,没有足够的空间分配,程序便会OOM,通俗一点说,也就是程序需要的空间比系统可以分配的空间大,所以就溢出了.

    二者关系:内存泄漏的堆积会导致内存溢出.

    导致内存泄漏的根本原因是:生命周期的长的对象持有生命周期短的对象,导致短生命周期的对象不能被及时释放,常见的导致内存泄漏的原因有:

    • 单例
    由于单例的生命周期和应用的生命周期一样长,所以有些对象如果被单例对象持有引用的话,就不能被系统回收,从而会导致内存泄漏
    1. 非静态的内部类持有外部类的引用
    2. 资源没有关闭
    使用了BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap等资源,应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,从而造成内存泄漏
    1. 容器导致的内存泄漏
    比如集合,我们常常会把一些对象存放在集合中,当我们不再需要的时候,应该及时的清理集合,否则集合会越来越大,在推出之前要调用clear(),再置为null

    导致内存溢出的原因是内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出,常见的原因有以下几点:

    • 一次加载的数据过于庞大,如查询数据库
    • 代码中存在死循环创建了大量的对象
    • 启动参数的内存值设置的太小
    • 加载大图片导致OOM

    相关文章

      网友评论

        本文标题:Android内存泄漏和内存溢出详解

        本文链接:https://www.haomeiwen.com/subject/vnoqgttx.html