内存泄漏(memory leak)与内存溢出(out of memory)区别

    对于初学者来说,主要是能区分内存泄漏和内存溢出,它们有区别但也是有联系的。

    打个比方,给你一个池子,你用了一部分,但你用完并没有把它还回去,甚至你也不知道怎么还回去,弄丢了,系统也没法拿回去,这就导致了内存泄漏。比如new了一个对象,用完没有销毁,比如流没有关闭,bitmap用完没有recycle掉等情况。

      而内存溢出就是,你把多于一池子的水硬塞给一池子,水就溢出来了,所以这就是内存溢出,Android总共运行内存一般为16M,同时运用很多个APP,每个APP的内存肯定不多且有限,你同时加载了几张高清大图,内存不够,于是溢出了,程序崩溃了。

举个列子:

在MainActivity中,Toast.makeText(this,"内存泄漏了",Toast.LENGTH_LONG);

       这段代码太常见了,很多人都这么写,那么我们考虑一下,当吐司还没弹出来的时候,你关掉了MainActivity,但是由于吐司引用着MainActivity.this,所以导致MainActivity无法被回收,这个activity实例无法被系统回收,就是内存泄漏了,它弄丢了。而你反复执行刚才的操作,吐司没弹出来就关掉MainActivity,导致泄漏越来越严重。你可用的内存越来越少,最后随便干点事用点内存,就溢出了,所以内存泄漏会最终导致内存溢出。

其中再提到一点强引用和若引用,强引用就是默认引用,就算出现内存溢出也会加载,还有一个软引用和弱引用。比如new weakRoftRence(bitmap),把bitmap放在弱引用中,出现oom(内存溢出)时,bitmap就不会强行加载。

  当然还能设置堆和栈内存的比例,在清单文件里设置。今天只是简单分析一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 2,410评论 0 12
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    _痞子阅读 1,654评论 0 8
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    DreamFish阅读 802评论 0 5
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    apkcore阅读 1,237评论 2 7
  • P:一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就...
    VanCare阅读 402评论 0 0