[toc]
app内存问题
一、如何排查内存问题
参考文章:
- Flutter内存泄漏检测
- flutter内存泄漏检测工具 https://github.com/liujiakuoyx/leak_detector
- 原理介绍 这可能是,Flutter 中最“强悍”的内存泄漏检测方案……
- 只原理没示例 Flutter内存泄露检查工具实践
- Flutter社区 Flutter 上的内存泄漏监控
二、优化前后数据对比
时刻 | 目前情况 | 取消图片缓存扩容设置 | 去掉TTF文件初始化 |
---|---|---|---|
打开APP时 | ![]() |
![]() |
![]() |
滑动瀑布流 | ![]() |
![]() |
![]() |
优化效果说明 | 优化后,在滑动瀑布流的时候,内存从原来的稳定1.24G,降低到稳定的896M | 优化后,打开APP时,内存明显再降低了80M左右 |
问1:滑动过程中的突刺是什么操作产生?
问2:滑动过程内存增加用户操作是?增加后,内存增加到峰值就没增加的原因?如果估算峰值/峰值是该数值有计算方法?
问3:去掉ttf后,内存降低的数值怎么计算?是1:1的方式?
三、下载的内存分析和优化
以下载以下文件为例,
网络资源:https://media.xihuanwu.com/applet/wishhouse/reward/svga/rocket.svga (13MB)
序号 | 步骤 | Dio 5.2.1 (Flutter) |
HTTP 0.13.6 (Flutter) |
OkHttp3 4.10.0 (Android) |
---|---|---|---|---|
0 | 未下载时 | 同左 | 同左 | |
1.1 | rocket.svga–13MB 下载过程峰值 |
|||
1.2 | rocket.svga–13MB 下载结束后置放 |
|||
1.3 | rocket.svga–13MB 下载结束后切换后台 |
|||
1.4 | rocket.svga–13MB 下载结束后切换后台回前台 |
|||
2.1 | rocket.svga–13MB 下载过程峰值 |
|||
2.2 | rocket.svga–13MB 下载结束后 |
|||
3.1 | rocket.svga–13MB 下载过程峰值 |
|||
3.2 | rocket.svga–13MB 下载结束后 |
|||
4.1 | rocket.svga–13MB 下载过程峰值 |
|||
4.2 | rocket.svga–13MB 下载结束后 |
|||
5.1 | rocket.svga–13MB 下载过程峰值 |
|||
5.2 | rocket.svga–13MB 下载结束后 |
884M | ||
小结 | 在5次下载后,内存占用达到884MB,尝试将应用切换至后台、置放、手动GC,内存均无变化。①每次下载内存增加?②下载的内存并没有办法得到释放? | 原来的触发下载改为此项后,内存无影响变化 |
结论:
通过以上数据可以看出,Flutter实现在每次下载时,内存都发生了显著的上升,而原生实现表现平稳,在执行以上操作后,Flutter实现的内存占用达到了 884MB,而原生为 284MB,相比Flutter实现 少了600MB的内存占用。
建议将现有下载转为原生实现,从而降低资源下载时的内存使用。
ARC中方法创建的内存释放
1 | - (void)exampleMethod { |
@autoreleasepool
中的内存释放
1 | - (void)exampleWithAutoreleasePool { |