finalize()方法是Object中的protected方法,子类可以覆盖该方法以实现对象整理,GC回收之前调用该方法。
通过可达性标记,确定一个对象没有被标记,并不是直接杀死,而进行又一次筛选,如果对象没有覆盖finalize()方法或finalize()方法已经被虚拟机调用过,则虚拟机认为“没有必要执行”。
如果这个对象有必要执行finalize()方法,那么将对象放到一个F-Queue队列中,并在稍后由一个虚拟机自动创建的、低优先级的Finalizer线程去执行它。这个执行时间是不确定的,假设在执行之前该对象被标记了,则可以复活了,就不需要GC该对象。