导图社区 抖音-性能优化-内存优化
这是一篇关于抖音-性能优化-内存优化的思维导图,主要内容包括:优化实践,工具建设,堆内存治理思路。概况了堆内存分配问题的解决方案、内存泄漏的监控与修复措施以及客户端资源管理的最佳实践。这些措施共同构成了抖音平台内存优化的完整框架,旨在提升应用性能、增强用户体验。
社区模板帮助中心,点此进入>>
电影院包场服务流程
暮尚正常运转导图
培训计划思维导图
车队管理
七夕活动策划
供应链类型
供应链管理平台
品牌设计分析思维导图
品牌定位思维导图
华东区项目
抖音-性能优化-内存优化
堆内存治理思路
两类问题
堆内存单次分配过大/多次分配累计过大
堆内存累计分配触顶
工具建设
工具思路
线下
工具
AS Memory Profiler
LeakCanary
Memory Analyzer(MAT)
基于LeakCanary设计自动分析上报内存泄露工具
流程
弊端
检测出来堆内存泄露过多,并且也没有比较好堆优先级排序,研发消费不过来,历史问题一直堆积,而且很难和业务研发沟通问题解决堆收益
线下场景能跑到的场景有限,很难把所有用户场景穷尽
Android端的HPORF的获取依赖原生的Debug.dumpHporf,dump过程会挂起主线程导致明显卡顿,线下使用体验较差
LeakCanary基于Shark分析引擎分析,分析速度较慢,分析过程会影响进程内存占用
分析结果较为单一,仅仅只能分析出Fragment、Activity内存泄露,想大对象、过多小对象问题导致的内存OOM无法分析
线上
Liko
核心思路
在发生OOM或者内存触顶等触发条件下,dump内存的HPROF文件,对HPROF文件进行分析,分析出内存泄露、大对象、小对象、图片问题并按照泄露链路自动归因,将大数据问题按照用户发生次数、泄露大小、总大小等纬度排序,推进业务研发按照优先级顺序来建立消费流程
整体架构
Hprot搜集
Hprof分析时机
dump分析完成后根据内存状态主动触发分析
当用户下次冷启退出应用后台且内存充足当情况下触发分析
分析策略
分析端
Android客户端分析
回传至Server端分析
使用方案
MAT分析引擎
优化实践
内存泄漏
后台根据GCROOT + 引用链自动分配研发跟进解决,还对系统导致一些内存泄漏进行分析和修复
内存泄漏兜底
大量对内存泄漏,如果都靠推进研发解决,经常会出现生成大于消费都情况,针对这些未被消费都内存泄漏在客户端做监控和止损点,将onDestroy的Activity添加到弱引用中,延迟60s监控是否回收,未回收则主动释放泄漏的Actvitiy持有的ViewTree的背景图和ImageVIew图片
大对象
小对象
通用类优化
字段优化
一次性的属性字段,用完后及时清理掉缓存(如json对象)
类拆分
将Model拆分成多个业务Model和一个通用Model,采用组合的方式让各个业务线最小化依赖自己的业务Model
业务优化
按需加载
内存缓存限制或清理
缓存优化
使用LRU缓存机制来缓存视频对象
图片
图片库
设置合理的缓存,同时在应用 or 系统内存吃紧的情况下主动释放图片缓存
图片自身优化
合理配置采样率、config、size等
图片兜底
图片监控