内存抖动

含义:短时间内有大量对象进出新生区导致,表现为内存忽高忽低,分析图呈现

锯齿状。

坏处:

  • 导致APP出现卡顿,严重可能导致OOM

内存泄露

含义:程序中已动态分配的堆内存由于某种原因导致内存为及时释放或无法释放,

造成内存浪费。

条件:泄露对象引用满足根可达性性,即A对象被B对象引用,但A已被销毁,B一直还存在

检测工具

  • Android Profile 内存性能分析

1、可导出dump供MAT分析使用,或者在3直观判断是否存在内存泄露

2、可通过监控分析内存total值,如果total值一直在上升(一般可能是一直执行字符串创建、UI绘制里频繁创建对象导致等某些方法内对象频繁创建导致),严重可能导致OOM,这种情况需要优化

  • MAT,用于分析内存泄露地方,可使用对比快照法

1、转换 Android Profile的hprof文件为MAT可识别的文件类型

     cmd命令: hprof-conv 转换前名称.hprof 转换后名称.hporf

2、导入hporf文件后,具体操作如下:

3、搜索Activity相关;4、排除弱引用、软引用相关

  • LeakCanary 内存泄露检测工具

作用:APP在运行时检测内存泄露,当内存泄露时生成泄露对象的引用链,发出通知告知使用者。

核心原理:通过检测Activity、Fragment等对象何时被销毁,应该被垃圾回收,把这些被销毁的对象通过ObjectWatcher 借助弱引用的方式来判断是否垃圾回收成功。

检测流程:

1>  检测保留的对象

2>  生成堆转储文件(heap dump)

3>  分析堆转储文件

4>  对泄露对象进行分类

可检测对象:

a、已销毁的Activity实例

b、已销毁的Fragment实例

c、销毁的View实例

d、已清除的ViewModel实例

 检测泄露实现方案:

借助弱引用(WeakReference)和 引用队列(ReferenceQueue),如果弱引用所引用的对象被垃圾回收器回收,虚拟机会把这个弱引用加入到与之关联的引用队列中,借助此特性可用来检测一个对象是否被垃圾回收器回收成功。

规避内存泄露方法

  • 避免在单例传参中使用易被销毁的上下文,比如Activity
  • 避免在静态变量中引用易被销毁的上下文,比如Activity
  • 避免在非静态内部类(包括匿名内部类)使用易被回收的强引用,比如:Activity中使用非静态内部类的Handler
  • 避免广播未取消注册
  • 避免使用Timer和TimeTask结束时,未取消监听
  • 避免集合中引用强引用(比如Activity、View等)但当强引用被回收时未及时销毁集合
  • 避免使用IO、db数据库操作后未关闭资源导致内存泄露
  • 避免使用属性动画当界面例如Activity销毁时未取消动画导致内存泄露
  • 避免WebView当界面例如Activity销毁时处理不当导致内存泄露;
    • 解决方法1、使用独立进程
    • 解决方法2、界面销毁时,先将WebView从父容器中移除,在执行WebView的onDestory

Android性能优化-内存优化相关推荐

  1. 关于android性能,内存优化 http://www.cnblogs.com/zyw-205520/archive/2013/02/17/2914190.html

     随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要  求远远高于PC的桌面应用程序.以上理由,足以需要 ...

  2. Android性能优化 - 内存优化

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - TraceView Android性能分析工具 为什么内存优化? 在一个商业项目中,很有可能因 ...

  3. Android性能:内存篇之内存回收

    Android性能:内存篇之内存回收 在学会内存性能优化之前我们得先了解内存如何回收,在<Android性能:内存篇之虚拟机概论>我们已经了解了虚拟机的概念及JVM结构体系与内存空间,在& ...

  4. Android之——性能与内存优化

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46987951 写出高效代码的两条基本的原则:(1)不要做不必要的事:(2)不要分配 ...

  5. 大尺寸图片的性能和内存优化

    Android程序优化,通常是指性能和内存的优化,更快的响应速度,更低的内存占用. 大尺寸的图片在进行显示的时候都会需要性能和内存的优化. 如果直接调用setImageResource(resId)的 ...

  6. Linux性能优化-内存优化

    目录 1.内存原理 1.1.内存映射 1.2.虚拟内存空间分布 1.3.SWAP运行原理 2.内存性能统计信息 2.1.内存系统使用量 2.2.缓存与缓冲区命中率 3.性能剖析 3.1.内存性能指标 ...

  7. iOS性能优化-内存优化

    https://blog.csdn.net/a184251289/article/details/82589128 2018年09月10日 14:25:31 xingshao1990 阅读数:328 ...

  8. Layabox率先支持小米快游戏,LayaAir 2.0.2版本大幅提升3D性能、spine性能和内存优化、新增屏幕适配设置!...

    自上次LayaAir 2.0.1beta新增3D动画文件压缩.内存与性能优化.开放域项目创建等功能后,一个月很快就过去,在这段时间里,我们不仅在官网新增了大量的LayaAir 2.0 3D文档,优化了 ...

  9. Android中HashMap内存优化之ArrayMap和SparseArray

    ArrayMap及SparseArray是android的系统API,是专门为移动设备而定制的.用于在一定情况下取代HashMap而达到节省内存的目的. 在Android开发中HashMap使用频率相 ...

最新文章

  1. gnupg环境搭建时遇到的问题
  2. 直播预告丨数十家平台实战真经,解密 IPTV 数据破局之道
  3. 《数学之美》——第三章 个人笔记
  4. asp.net core中使用cookie身份验证
  5. Redis背后的故事
  6. Apache Camel 2.20发布–新增功能
  7. docker安装linux安装mysql_怎么启动mysql-linux 怎么安装mysql?怎么在docker搭建mysql8?docker安装mysql...
  8. stft isar成像 matlab,基于时频分析的ISAR成像
  9. 9、MySQL逻辑架构介绍
  10. group by 和count 联合使用问题
  11. 设置oracle odbc,Oracle Windows ODBC 数据源配置
  12. isPostBack解释
  13. IRedMail卸载升级
  14. c语言编程温度转换源,c语言编程,将华氏温度转换成摄氏温度。转换公式为:c=5/9 * (f-32),其中f代表华氏温度...
  15. mysql proxies priv_Mysql 5.7.18 利用MySQL proxies_priv实现类似用户组管理
  16. 二维特征分类的基础_用特征提取技术降低数据集维度,你学会了吗?
  17. 普通链接与迅雷、旋风、快车链接相互转化的步骤
  18. ImageLoader(UIL)自定义HTTP Header信息
  19. 算法:找出1-10000之间的所有素数
  20. 对LMAX架构以及Event Sourcing模式的一些新思考和问题的记录

热门文章

  1. 一维区间上高斯数值积分的MATLAB实现
  2. Verilog信号上升沿检测
  3. Percona Server 安装
  4. C语言 单引号 双引号问题
  5. Python全栈学习笔记day 40.5+:线程池和线程池的Python标准模块--concurrent.futures
  6. SASE:基于数字身份标识的网络与安全访问云服务
  7. 如何往虚拟机里面复制文件(末尾附带视频教程)
  8. 孙立平:绝望比贫穷更可怕(转载)
  9. Python的rabbitMQ
  10. Mybatis的5种分页方式