并不是,对象的 finalize 方法给了对象一次垂死挣扎的机会。 当对象不可达(可回收)并发生 GC 时,会先判断对象是否执行了 finalize 方法,如果未执行,则会先执行 finalize 方法! 所以,我们可以在此方法里拯救这个濒死的对象。 具体做法就是将当前对象与 GC Roots 关联,这样执行 finalize 方法之后,GC 会再次判断对象是否可达,如果不可达,则会被回收,如果可达,则不回收! 需要注意的是,这个保命套路只能用一次,因为 finalize 方法只会被执行一次,如果第一次执行 finalize 方法此对象变成了可达确实不会回收,但如果对象再次被 GC,则会忽略 finalize 方法,对象会被直接回收掉!