美文网首页
内存泄漏(memory leak)与内存溢出(out of me

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

作者: 北漂农村小伙儿 | 来源:发表于2016-11-21 17:25 被阅读128次

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

        打个比方,给你一个池子,你用了一部分,但你用完并没有把它还回去,甚至你也不知道怎么还回去,弄丢了,系统也没法拿回去,这就导致了内存泄漏。比如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就不会强行加载。

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

    相关文章

      网友评论

          本文标题:内存泄漏(memory leak)与内存溢出(out of me

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