Android性能优化-内存优化
内存抖动
含义:短时间内有大量对象进出新生区导致,表现为内存忽高忽低,分析图呈现
锯齿状。
坏处:
- 导致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性能优化-内存优化相关推荐
- 关于android性能,内存优化 http://www.cnblogs.com/zyw-205520/archive/2013/02/17/2914190.html
随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要 求远远高于PC的桌面应用程序.以上理由,足以需要 ...
- Android性能优化 - 内存优化
性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - TraceView Android性能分析工具 为什么内存优化? 在一个商业项目中,很有可能因 ...
- Android性能:内存篇之内存回收
Android性能:内存篇之内存回收 在学会内存性能优化之前我们得先了解内存如何回收,在<Android性能:内存篇之虚拟机概论>我们已经了解了虚拟机的概念及JVM结构体系与内存空间,在& ...
- Android之——性能与内存优化
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46987951 写出高效代码的两条基本的原则:(1)不要做不必要的事:(2)不要分配 ...
- 大尺寸图片的性能和内存优化
Android程序优化,通常是指性能和内存的优化,更快的响应速度,更低的内存占用. 大尺寸的图片在进行显示的时候都会需要性能和内存的优化. 如果直接调用setImageResource(resId)的 ...
- Linux性能优化-内存优化
目录 1.内存原理 1.1.内存映射 1.2.虚拟内存空间分布 1.3.SWAP运行原理 2.内存性能统计信息 2.1.内存系统使用量 2.2.缓存与缓冲区命中率 3.性能剖析 3.1.内存性能指标 ...
- iOS性能优化-内存优化
https://blog.csdn.net/a184251289/article/details/82589128 2018年09月10日 14:25:31 xingshao1990 阅读数:328 ...
- Layabox率先支持小米快游戏,LayaAir 2.0.2版本大幅提升3D性能、spine性能和内存优化、新增屏幕适配设置!...
自上次LayaAir 2.0.1beta新增3D动画文件压缩.内存与性能优化.开放域项目创建等功能后,一个月很快就过去,在这段时间里,我们不仅在官网新增了大量的LayaAir 2.0 3D文档,优化了 ...
- Android中HashMap内存优化之ArrayMap和SparseArray
ArrayMap及SparseArray是android的系统API,是专门为移动设备而定制的.用于在一定情况下取代HashMap而达到节省内存的目的. 在Android开发中HashMap使用频率相 ...
最新文章
- gnupg环境搭建时遇到的问题
- 直播预告丨数十家平台实战真经,解密 IPTV 数据破局之道
- 《数学之美》——第三章 个人笔记
- asp.net core中使用cookie身份验证
- Redis背后的故事
- Apache Camel 2.20发布–新增功能
- docker安装linux安装mysql_怎么启动mysql-linux 怎么安装mysql?怎么在docker搭建mysql8?docker安装mysql...
- stft isar成像 matlab,基于时频分析的ISAR成像
- 9、MySQL逻辑架构介绍
- group by 和count 联合使用问题
- 设置oracle odbc,Oracle Windows ODBC 数据源配置
- isPostBack解释
- IRedMail卸载升级
- c语言编程温度转换源,c语言编程,将华氏温度转换成摄氏温度。转换公式为:c=5/9 * (f-32),其中f代表华氏温度...
- mysql proxies priv_Mysql 5.7.18 利用MySQL proxies_priv实现类似用户组管理
- 二维特征分类的基础_用特征提取技术降低数据集维度,你学会了吗?
- 普通链接与迅雷、旋风、快车链接相互转化的步骤
- ImageLoader(UIL)自定义HTTP Header信息
- 算法:找出1-10000之间的所有素数
- 对LMAX架构以及Event Sourcing模式的一些新思考和问题的记录