关于内存相关的梳理

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

关于内存相关的梳理_第1张图片
   3 一个类的非静态内部类(只要能访问父类的私有变量的都默认引用了父类)由于默认引用了父类,也相当于父类的一部分,因此内部类的成员变量也要符合父类的上述要求,否则导致父类生命无法正常释放
  这类现象比较常见又比较隐蔽
  比如 activity被handler(内部类)持有,handler又被message持有,所以导致message未处理完activity也无法释放的现象。
  再比如 起一个内部类线程,线程没处理完,父类就无法释放。


3 实例总结分类

   监测类(动态内存检测比如抖音的xxx,activity fragment监测比如leakcanery,慢函数,卡顿检测比如腾讯的matrix,启动优化监测等)
   缓存类:LruCache,glide 的三级缓存,recycleview的四级缓存
   
接下来要对这些分类进行进一步了解,目前还没到掌握,只是了解的程度,然后再写下个人总结吧。

你可能感兴趣的:(常用知识点分类汇总,android,缓存)