美文网首页
Android——内存泄露与溢出

Android——内存泄露与溢出

作者: CRAZYSNAIL_c105 | 来源:发表于2017-12-06 16:41 被阅读0次

内存溢出( out of memory )

  程序在申请内存时,求分配的内存超出系统所能提供的内存,系统不能满足于是溢出。例:用1000ml水,到入100ml的容器,最终100ml的容器无法装下1000ml水溢出去。

内存泄漏(memory leak)

  指程序在申请内存后,无法释放已申请的内存空间。内存泄漏可分为4种:常发性内存泄漏、偶发性内存泄漏、一次性内存泄漏、隐式内存泄漏。

内存泄漏与内存溢出的联系

  内存泄漏的不断堆积,最终会超系统的内存,造成内存溢出。

安卓OOM

  java.lang.OutOfMemoryException内存溢出异常,简称OOM。造成OOM原因主要是内存泄漏堆积系统内存不足内存溢出。

安卓中容易导致OOM情况有以下几种:

  • 数据库的cursor没有关闭。
  • 构造adapter没有使用缓存contentview。
  • 调用registerReceiver()后未调用unregisterReceiver().
  • 未关闭InputStream/OutputStream。
  • Bitmap使用后未调用recycle()。
  • Context泄漏。
  • static关键字等。

安卓中怎样避免内存泄漏

  1. 不要将Context对象传给activity与fragment以外的对象。
  2. 永远不要将Context和View存储在静态变量中。
  3. 在onPause()/onDestroy()方法中解除监听器,包括在Android自己的Listener,Location Service或Display Manager Service以及自己写的Listener。
  4. 不要在后台线程与AsyncTask中存储activity的强引用。不然当Activity被关闭后,由于AsyncTask仍在执行且持有Activity的强引用,导致Activity无法被回收。
  5. 使用Application Context而不是Activity的Context
  6. 尽量不要用非静态内部类,因为它会持有外部类的引用。在非静态内部类中存储Activity或View的引用会导致内存泄露。如需存储就使用WeakReference。

相关文章

  • 内存溢出与内存泄露

    目录 [TOC] 1 内存泄露与内存溢出的区别 1.1 内存泄露 内存泄露(Memory Leak),指的是堆内存...

  • Android内存如何泄露

    Android内存如何泄露 对象的生命周期溢出 对象无限创建引起内存爆满 生命周期溢出 内存泄露说到底是,对象的生...

  • Android——内存泄露与溢出

    内存溢出( out of memory )   程序在申请内存时,求分配的内存超出系统所能提供的内存,系统不能满足...

  • Android的内存泄露与内存溢出

    http://www.jianshu.com/p/402225fce4b2 内存泄露: 当一个对象已经不在使用了,...

  • Android中内存泄露与内存溢出

    面试中经常会问到什么是内存泄露?什么又是内存溢出?今天就来好好总结一下。 一、内存泄露 ( memory leak...

  • 内存优化

    内存优化主要是分析内存泄露和内存溢出。将从内存是怎么分配,内存怎么出现泄露和溢出,用工具判断什么情况出现泄露,找出...

  • Android面试 内存泄漏连环炮

    面试问题 什么是内存泄露,什么是内存溢出 什么情况下会造成堆溢出、栈溢出 常见造成内存泄露的情况 常见造成内存溢出...

  • Android 内存泄露及LeakCanary分析

    一.前言 在日常的Android开发中,不经意间就会造成内存泄露,如果持续泄露的话,那么最后会造成内存溢出,应用也...

  • JAVA内存区域

    首先解释下内存溢出和内存泄露之间的区别,为后面的学习做些铺垫: 1、内存溢出和内存泄露的区别和联系 内存溢出 ou...

  • JAVA内存区域

    首先解释下内存溢出和内存泄露之间的区别,为后面的学习做些铺垫: 1、内存溢出和内存泄露的区别和联系 内存溢出 ou...

网友评论

      本文标题:Android——内存泄露与溢出

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