zoukankan      html  css  js  c++  java
  • 静态内部类解决内存泄漏

    非静态内部类导致内存泄漏主要原因:::App可能会因为大量的内存泄漏导致内存耗尽,引发Crash,如果内存耗尽,App会由于内存空间不足,出现频繁的GC,每一次GC都是一个耗时阻塞操作,会造成设备卡顿。

              非静态内部类中创建了一个静态实例,导致该实例的生命周期和应用ClassLoader级别,又因为该静态实例会隐式持有其外部类的引用,所以导致其外部类无法正常释放,出现泄漏问题。

    (classloader:用来动态加载某个class文件到内存当中,只有class被载入到内存中之后,才能被其他class所引用)

    1.非静态内部类会对外部类存在一个隐式引用            非静态(匿名)内部类会持有外部类的引用,静态内部类中未持有外部类的引用。

    2.非静态内部类中存在异步任务,可能导致其对应的外部类内存资源无法正常释放        

    3.非静态内部类中创建了一个静态实例,会导致内存泄漏

    解决思路::::去掉隐式引用(静态(匿名)内部类),手动管理对象引用(修改静态内部类的构造方法,手动引入其外部类引用)当内存不可用时,不执行不可控代码(Android 可以结合智能指针 ,WeakReference包裹外部类实例)

    总结::::不是所有内部类只能使用静态内部类,只有在该内部类中的生命周期不可控的情况下,采用静态内部类。

    多想想对象之间的引用关系。

               

  • 相关阅读:
    JAVA的学习日记15
    JAVA的学习日记14
    CIRD主站与DOPAS构建笔记#1
    信仰之题——Codeforces Round 259(附题面完整翻译)
    平面最近点对问题
    BZOJ4552 [Tjoi2016&Heoi2016]排序
    BZOJ1001 [Beijing2006]狼抓兔子
    (二)k8s编写资源清单
    linux常用搜索工具find/whereis/locate
    解决centos7 的/etc/rc.local不会开机执行
  • 原文地址:https://www.cnblogs.com/acg88688/p/11870581.html
Copyright © 2011-2022 走看看