- 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对象没有被引用,无法反射该类的方法