安卓知识总结---性能篇(内存优化)

一、内存泄漏的原因

Activity 的泄漏、Cursor 未关闭、线程的过度使用、无节制的创建缓存、以及某个 so 库悄无声息一点点的泄漏内存

二、检测内存泄漏

1)Java内存泄漏

1、LeakCanary Activity 泄露检测 --(原理:弱引用监测,activity onDestory是否被释放)

2、Bitmap分配及回收追踪 -- (原理:所有被创建出来得Bitmap加入weakHashMap)

3、代码扫描 -- (打开文件没有关闭,注册事件没有释放)

4、线程数量监控 -- (定时器 10 分钟 dump 出应用所有的线程,500+容易oom)

5、重复图片监控 -- 重复图片指的是 Bitmap 的像素数据完全一致,但是有多个不同的对象存在

2)  Native内存泄漏

1、针对无法重编 so 的情况,使用了 PLT Hook 拦截库的内存分配函数,定期扫描分配与释放是否配对

2、针对可重编的 so 情况,通过 GCC 的“-finstrument-functions”参数给所有函数插桩,桩中模拟调用栈入栈出栈操作,通过 ld 的“–wrap”参数拦截内存分配和释放函数,定期扫描分配与释放是否配对

三、监控内存使用

1、美团 probe -- 裁剪hprof上传到服务端分析,或者客户端本地分析

四、避免占用过多的内存

1、webp、9n图片的使用

2、选用合理的数据格式 使用SparseArray(折半查找)、SparseBooleanArray, and LongSparseArray来代替Hashmap

3、统一的bitmap加载器,图片裁剪,清除图片缓存

来源:

微信:https://time.geekbang.org/column/intro/142?code=CzZyMVt9D2DFD9KOOd%2FHWWCts5PGI7cAMhV4MJerI6c%3D%3Futm_source%3Dandroiddevtools&utm_medium=website  

https://mp.weixin.qq.com/s/KtGfi5th-4YHOZsEmTOsjg?

https://mp.weixin.qq.com/s/Z7oMv0IgKWNkhLon_hFakg?

美团:https://tech.meituan.com/2019/11/14/crash-oom-probe-practice.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值