1 关键字 总结
(lowmemory,anr in)
2 知识储备
虚拟机原理
垃圾回收算法 又包含标记 和清除两种算法
标记:程序计数器-已过时,可达性分析
具体可见 http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fconcepts%2Fgcroots.html&cp=37_2_3
清除:标记-清除算法 ( mark-sweep ),复制算法,标记-压缩算法,分代收集算法,(老年代和新生代)
个人总结:
哪些是虚拟机能自动回收的,哪些是需要我们注意的呢
1 native相关的还是需要手动释放(bitmap,jni传过来的相关的对象)
2 一个类里面的成员变量,非静态内部类有没有被更长的生命周期对象引用,没有则可以自动被回收,比如图中的现象1
3 一个类的非静态内部类(只要能访问父类的私有变量的都默认引用了父类)由于默认引用了父类,也相当于父类的一部分,因此内部类的成员变量也要符合父类的上述要求,否则导致父类生命无法正常释放
这类现象比较常见又比较隐蔽
比如 activity被handler(内部类)持有,handler又被message持有,所以导致message未处理完activity也无法释放的现象。
再比如 起一个内部类线程,线程没处理完,父类就无法释放。
3 实例总结分类
监测类(动态内存检测比如抖音的xxx,activity fragment监测比如leakcanery,慢函数,卡顿检测比如腾讯的matrix,启动优化监测等)
缓存类:LruCache,glide 的三级缓存,recycleview的四级缓存
接下来要对这些分类进行进一步了解,目前还没到掌握,只是了解的程度,然后再写下个人总结吧。