• garbage collector
  • 为什么gc
    • 减少编程工作量
    • 减少内存泄露
    • 安全性
  • 定位
    • 引用计数法
    • 根搜索算法(使用中)
      • 从GC Roots对象起点,向下搜索,路径成为Reference Chain, 不可达对象不可用
      • GC Roots包括
        • 虚拟机栈(栈帧中本地变量表)中的引用对象
        • 方法区域中的类静态引用对象
        • 方法区域中常量引用对象
        • 本地方法栈JNI(native方法)引用的对象
  • 回收算法
    • 标记-清除(mark-sweep) # DVM(Dalvik Virtual Machine, 安卓用)使用的算法
      • 效率不高,清除后产生大量不连续空间
      • 标记所有要回收的对象
      • 清除标记对象
    • 复制(copying)
      • 实现简单,效率高。内存利用率不高
      • 用于新生代,两块比例8:1
      • 内存分成相等两块,使用其中一块
      • 回收时,存活对象复制到另一块,这块整个清理掉
    • 标记-整理(mark-compact)
      • 适合老年代
      • 把存活对象往内存一端移动
      • 回收边界外内存
    • 分代收集(generational collection)
      • 新生代用复制算法
      • 老年代用标记-整理算法
  • 4种引用类型回收 # java强引用、软引用、弱引用、虚引用
  • 方法区回收
    • 废弃的常量 # 看引用计数
    • 无用的类
      • 实例都已经回收
      • 加载该类的ClassLoader已回收
      • 该类的class对象没有被引用,无法反射该类的方法