一次关于JVM的面试经历,安卓开发快速学习

内存泄漏是什么?

内存泄漏即 ML (Memory Leak) 指 程序在申请内存后,当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象

内存泄漏有哪些情况,对应的解决方案?

内存泄漏的原因归根到底就是当需要被回收变量的内存被其他变量引用持有,导致内存回收失败

常见的原因有:

1.非静态内部类/匿名类
  • 原因1:非静态内部类/匿名类 Handler持有外部的Activity/Fragment对象的引用,导致Activity/Fragemnt被销毁的时候没有被回收

  • 解决方案:

    1. 将Handler类改为静态内部类 + 弱引用(WeakReference)持有Activity引用(静态类默认不持有外部的引用)
    2. 当外部类(一般是Activity/Fragment)结束生命周期时,清空Handler队列
  • 原因2:非静态内部类的实例(对象) = 静态实例 (其生命周期 = 应用的生命周期)

  • 解决方案:

    1. 将该类改为静态类(静态类默认不持有外部的引用)
    2. 将该类抽出来封装成为一个单例
  • 原因3:多线程 工作线程正在处理任务时外部类需要销毁,此时工作线程持有外部类的引用导致无法被回收

  • 解决方案:

    1. 将该线程类类改为静态类(静态类默认不持有外部的引用)
    2. 当外部类结束生命周期时强制结束线程
2.集合类
  • 原因:集合类添加元素之后持有集合元素的引用,导致该集合元素不可被回收,导致内存泄漏

  • 解决方案:

    1. 集合类使用完元素对象后,必须将该元素从集合中删除(由于一个集合中有多个元素,所以最简单的方案就是清空集合对象(clean)&设置为Null)
3.资源对象使用后未关闭
  • 原因:资源对象使用后未关闭,在Activity/Fragemnt销毁时没有关闭/注销这些资源,将导致无法回收 例如:广播BraodcastReceiver文件流Fire图片资源Bitmap数据库游标

  • 解决方案:

    1. Activity销毁时及时关闭/注销资源
4.Static关键字修饰成员变量
  • 原因:Static关键字修饰成员变量的生命周期 = 应用的生命周期 例如 private static Context mContext = context 那么context上下文对应的Activity则无法被回收

  • 解决方案:

    1. 尽量不要使用Static成员变量引用,使用弱引用代替强引用
    2. 使用单例模式
4.其他使用
  • 原因1:Context:当拥有Activity context的引用的对象仍在使用,则该Activity需要销毁时无法回收

  • 解决方案:

    1. context的引用不要超过它的生命周期
    2. 使用ApplicationContext代替
  • 原因2:WebView:不再使用WebView对象后没有及时销毁,导致内存占用

  • 解决方案:

    1. 通过多线程对不再使用的WebView对象进行销毁
  • 原因3:Adapter:滑动ListView、RecycleView获取新View时 都在getView()中重新实例化一个View对象,浪费资源,使内存占用越来越大

  • 解决方案:

    1. 使用缓存的convertView
    2. 直接使用ViewHolder

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

链接:https://pan.baidu.com/s/1BUbENbinlO0KpI5aQDA1JA?pwd=1234
提取码:1234

相关推荐

  1. 关于JVM面试经历开发快速学习

    2024-06-17 15:38:03       8 阅读
  2. 开发面试

    2024-06-17 15:38:03       24 阅读
  3. 开发面试

    2024-06-17 15:38:03       25 阅读
  4. 面试经历

    2024-06-17 15:38:03       23 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-17 15:38:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-17 15:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-17 15:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-17 15:38:03       18 阅读

热门阅读

  1. Web前端编辑器:探索其深度与广度

    2024-06-17 15:38:03       6 阅读
  2. 【Python】在 Pandas 中使用 AdaBoost 进行分类

    2024-06-17 15:38:03       9 阅读
  3. ElasticSearch聚合排序

    2024-06-17 15:38:03       7 阅读
  4. MySQL触发器基本结构

    2024-06-17 15:38:03       9 阅读
  5. 【Elasticsearch】索引快照并还原到其他集群

    2024-06-17 15:38:03       8 阅读
  6. 企业微信hook接口DLL调用(4.1.22.6009版本)

    2024-06-17 15:38:03       7 阅读
  7. PostgreSQL的系统视图pg_policies

    2024-06-17 15:38:03       7 阅读
  8. 给wordpress添加限制游客浏览数量功能

    2024-06-17 15:38:03       7 阅读
  9. 下载huggingface上的大模型文件

    2024-06-17 15:38:03       6 阅读