垃圾回收可达性分析
解决了“引用计数算法”的循环引用问题。
GC roots
作为GC roots的对象包括下面几种(重点是前面4种)
- 虚拟机栈(栈帧种的本地变量表)中引用的对象;
- 方法区中类静态属性引用的对象;
- 方法区中常量引用的对象;
- 本地方法栈中JNI(即一般说的Native方法)引用的对象;
- JVM的内部引用(class对象、异常对象NullPointException、OutofMemoryError、系统类加载器);
- 所有同步锁(synchronized关键字)持有的对象;
- JVM内部的JMXBean、JVMTI中注册的回调、本地代码缓存等;
- JVM实现中的“临时性”对象,跨代引用的对象(使用分代模型回收,只回收部分代的对象);