美文网首页
面试必备:内存溢出 内存泄漏

面试必备:内存溢出 内存泄漏

作者: AndryYu | 来源:发表于2017-11-03 04:15 被阅读0次

前言

    内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,则就是内存溢出。
    内存泄漏(memory leak):是指程序在申请内存后,无法释放已申请的内存空间。一次内存泄漏危害可以忽略,但内存泄漏堆积后果很严重,最终导致耗尽系统所有的内存,出现程序crash。

内存泄漏原因

1. Activity匿名内部类
解决方案:改为静态非匿名内部类即可

2. Activity添加监听器造成Activity内存泄漏
解决方案:在onDestory方法调用释放监听器

3. Handler 匿名内部类造成内存溢出
解决方案
    使用弱引用(WeakReference)
    使用静态内部类
    在onDestory()方法释放资源

  @Override
    protected void onDestroy() {
        super.onDestroy();
       //如果参数为null的话,会将所有的Callbacks和Messages全部清除掉。
        handler.removeCallbacksAndMessages( null );
    }

4. AsyncTask造成内存泄漏
解决方案
    自定义静态AsyncTask类
    AsyncTask的周期和Activity周期保持一致。也就是在Activity生命周期结束时要将AsyncTask cancel掉。

   @Override
    protected void onDestroy() {
        super.onDestroy();
 
        //取消异步任务
        if ( myTask != null ){
            myTask.cancel(true ) ;
        }
    }

5. Bitmap的处理
解决方案: 对bitmap进行压缩;不用的时候调用 recycle(),把他清理掉 ;Lrucache处理图片
6 不要使用Enum
enum中的每一个值其实都是一个Object对象,每声明一个值就会创建一部分的内存以使它能够被引用到这个对象,相比于静态常量,enum会花费近2倍的内存空间。

参考文献
1.Android 如何有效的解决内存泄漏的问题

相关文章

  • 面试必备:内存溢出 内存泄漏

    前言     内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用,出现out...

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • 内存溢出和内存泄漏

    1.内存泄漏 2.内存溢出 -如何避免内存泄漏、内存溢出?

  • Android 优化

    Android 内存优化内存溢出 , 内存泄漏 , 内存泄漏过多就导致内存溢出 Android 系统垃圾回收机制内...

  • 【Android测试】内存泄漏检测 LeakCanary

    什么是内存泄漏和内存溢出?内存泄漏有什么危害?LeakCanary检测内存泄漏? 内存泄漏(Memory Leak...

  • JVM

    1. 内存溢出和内存泄漏 内存溢出是说程序需要申请的内存超过了JVM当前可以分配的最大内存,溢出。内存泄漏是说期望...

  • Android性能优化 内存泄漏和内存溢出

    内存泄漏 内存溢出 常见的内存泄露场景 常见的内存溢出场景

  • 【JVM】内存溢出分析

    一 内存溢出概述 都有发生内存溢出异常(OutOfMemoryError,简称OOM)的可能。 内存溢出和内存泄漏...

  • 使用 Memory Profiler 排查内存泄露

    使用 Memory Profiler 排查内存泄漏 内存泄漏和内存溢出 **Memory Profiler **是...

  • 面试题-第一期

    内存泄漏&&内存溢出 参考博客参考博客 先来看看内存泄漏,内存溢出,OOM,GC回收这几个概念。把App的堆内存空...

网友评论

      本文标题:面试必备:内存溢出 内存泄漏

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