finalize()方法了解吗?有什么作用?

finalize()方法了解吗?有什么作用?
可以用一个比喻来解释垃圾回收的过程:垃圾回收就像古代的审判,而finalize()
方法则相当于判决的最后一次机会。在执行最终的判决之前,需要对罪犯进行最后的审查,以确定是否有冤情需要平反,是否需要给予判决的机会。
当一个对象经过可达性分析后,如果没有与GC Roots相连的引用链,该对象将被进行第一次标记,并进行筛选,判断是否需要执行finalize()
方法。如果对象在finalize()
方法中成功拯救自己——通过重新与引用链上的任何一个对象建立关联,例如将自己(this
关键字)赋值给某个类变量或对象的成员变量,那么在第二次标记时,该对象就会"逃过一劫",不会被回收。
但是,如果对象没有抓住这个机会,无法在finalize()
方法中拯救自己,那么对象将真正被回收。就像古代的判决一样,无法再挽回了。