首先有一系列 GC root 根节点。从这些根节点开始向下搜索,走过的路径成为引用链,若一个对象到 GC root 没有任何引用链,则此对象不可活。当一个对象不可活时仍可以使用 finalize 方法自救
finalize 方法是 Object 的方法,子类可以重写该方法以实现资源清理过程。当某个对象变成 GC root 不可达时,GC 会判断该对象是否重写了 finalize 方法,若没有则直接回收,若重写了则执行 finalize 方法之后重新判断该对象是否可达,若可达则对象复活,否则进行回收
可作为 GC root 的对象包括:
方法区中常量引用的对象
方法区中静态属性引用的对象
虚拟机栈中引用的对象
本地方法中引用的对象