zoukankan      html  css  js  c++  java
  • Android 内存泄露

    一. 内存泄漏与内存溢出

    内存溢出out of memory:指的是程序在申请时,没有足够的内存空间供其使用,出现oom,比如申请了一个integer,但给它存了long才能存下的数,就是内存溢出,内存溢出通俗讲就是内存不够用。

    内存泄露memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后的果很严重,无论多少内存迟早会占光。

    二. 内存泄露的原因

    1) handler引起的内存泄露

    解决:将handler声明成静态内部类,就不会持有外部类SecondActivity的引用,其生命周期就和外部类无关

             如果handler里面需要context的话,可以通过弱引用的方式引用外部类

    2) 单例模式引起的内存泄露

    解决:context是ApplicationContext,由于ApplicationContent的生命周期和APP一致,不会导致内存泄露

    3) 内静态内部类创建静态实例引起内存泄露

    解决:把内部类修改为静态内部类

    4)非静态匿名内部类引起的内存泄露

    解决:将匿名内部类设置为静态的

    5)注册/反注册未成对使用引起的内存泄露

    解决:注册广播接接收器,EventBus等,记得解绑

    6)资源对象没有关闭引起的内存泄露

    解决:那些资源不使用的时候,记得调用相应的类似close(),destory(),recycle(), release()等释放

    7)集合对象没有及时清理引起的内存泄露

    解决:通常会吧一些对象装入到集合中,当不使用的时候,一定要记得及时清理集合,让相关对象不再被引用

  • 相关阅读:
    你加班太多是因为你的代码写的烂
    构建知识图谱,让自己更值钱
    程序员的年终总结该怎么写?
    一本开源的程序员快速成长秘笈
    vue项目框架搭建
    mysql的那点事儿,你知道吗
    idea快速返回上次代码查看的位置
    ajax、axios和fetch的区别
    java8 stream的用法总结
    正则表达式
  • 原文地址:https://www.cnblogs.com/Ayinger/p/11966726.html
Copyright © 2011-2022 走看看