安卓性能优化 三: 内存优化

256 阅读2分钟

内存优化包括内存抖动和内存泄漏

内存抖动:

短时间内有大量的对象创建销毁 引起频繁的GC.

大量的字符串拼接就会造成内存抖动

拼接字符串 内部频繁创建 stringBuilder 临时变量

内存抖动容易导致oom 因为频繁gc容易产生内存碎片

profile工具使用

点击profile app 将应用安装到手机

运行起来会出现👇

根据位置修复代码就可以了

内存泄漏:

程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费。 长生命周期对象持有短生命周期对象强引用,从而导致短生命周期对象无法被回收!

通过一系列称为“GC Roots”的对象作为起始点,从这些节点向下搜索,搜索所有的引用链,当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时,则证明此对象是不可用的。

softReference 和 weakReference 区别

softReference当gc扫描到了 如果内存不紧张的时候不会回收 内存紧张时回收

weakReference 只要gc扫描到就会被回收

检查是否有内存泄漏不断进入退出页面

点击dunp

此时不能证明会不会有内存泄漏 如果是softReference 和 weakReference是没问题的 可能gc还没来得几回收

导出内存快照

打开mat 工具 百度自行下载

生成的内存快照文件是没办法直接在mat工具中直接打开的

在sdk==》platform-tools找到 hprof-conv.exe 将地址配置到path环境变量里面 之后再cmd 中使用工具 进行文件转换

合并最短可达路径 排除 软,弱,虚引用