垃圾判断算法
引用计算法
- 概念:给对象添加一个引用计算器,每当有一个地方引用它时,计算器就加1;当引用失效时,计算器值就减1;当计数器值为0时视为失效。
- 缺陷:很难解决对象之间的相互循环引用
1 | public class ReferenceCountingGC { |
1 | CommandLine flags: -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC |
从GC日志看,对象由PSYoungGen转移至ParOldGen中。
根搜索算法
- 概念:通过一系列名为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则此对象视为不可用。
- 可被视为GC Roots的对象
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 方法区中的类静态属性引用的对象
- 方法区中的常量引用的对象
- 本地方法栈中Native方法引用的对象
引用分级
- 强引用(Strong Reference):永远不会回收
- 软引用(Soft Reference):在内存溢出前回收
- 弱引用(Weak Reference):垃圾收集时回收
- 虚引用(Phantom Reference):无影响,用于系统通知