1.软,弱,虚引用区别:
GC 扫描后不一定回收,除非内存不够;GC扫描到就回收了;及时回收;
2.垃圾回收原理:
对象创建后放在年轻代的Eden区,GC 扫描后计数+1,放在年轻代的存活1区,GC再次扫描到后移动到年轻代的存活2区,15次之后还可达,从年轻代移到老年代,时间沉淀后,还可达,从老年代移到永久代。
3.垃圾回收算法:
标记清除算法:容易内存碎片,扫描两次,第一次扫描标记,第二次扫描回收不可达对象
复制算法:内存使用一半,用完后用另一半,之前一半清除和回收。利用率低,高效(因为只扫描一次)
标记整理算法:第一次扫描出使用中,可回收,未使用的内存,第二次扫描整理。因此效率低
分代算法:综合运用复制算法和标记整理算法(比如老年代以上,不需要经常回收,效率地点也没关系,但是利用率高啊)
4.Android获取内存:
5.MAT使用:
1.柱状图包名排序后:incoming和outcoming理解:
2.浅堆和深堆:
3.新增引用内存的影响:
6.Bitmap 内存优化(Android official site)
epic(from github)
7.LeakCanary原理(输出和haha可达性诊断):
1.在contentProvider中进行的初始化
2.原理理解:
3.看输出时,从下往上看,最下面的时泄漏的类,往上看是一层层的持有关系。
拓展:
Activity.componentCallback2