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

可以用一个比喻来解释垃圾回收的过程:垃圾回收就像古代的审判,而finalize()方法则相当于判决的最后一次机会。在执行最终的判决之前,需要对罪犯进行最后的审查,以确定是否有冤情需要平反,是否需要给予判决的机会。

当一个对象经过可达性分析后,如果没有与GC Roots相连的引用链,该对象将被进行第一次标记,并进行筛选,判断是否需要执行finalize()方法。如果对象在finalize()方法中成功拯救自己——通过重新与引用链上的任何一个对象建立关联,例如将自己(this关键字)赋值给某个类变量或对象的成员变量,那么在第二次标记时,该对象就会"逃过一劫",不会被回收。

但是,如果对象没有抓住这个机会,无法在finalize()方法中拯救自己,那么对象将真正被回收。就像古代的判决一样,无法再挽回了。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题