内存优化包括内存抖动和内存泄漏
内存抖动:
短时间内有大量的对象创建销毁 引起频繁的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 中使用工具 进行文件转换
合并最短可达路径 排除 软,弱,虚引用