为什么Java中的finalize()方法不在Finalizer类中?
为什么在对象类中定义它?
最佳答案
“ Finalizer”类java.lang.ref.Finalizer和“ finalizer()”方法java.object.finalize是两个独立的不同事物。
正如alexey提到的“ finalize()”一样,
您可以覆盖[finalize()] ...以指定在什么情况下该做什么
给定的对象由垃圾收集器收集。
这里讨论了“终结器类”的目的,作用和寿命:
http://www.fasterj.com/articles/finalizer2.shtml
JVM将忽略琐碎的finalize()方法...否则,如果
实例正在创建,并且该实例具有非平凡的
如果定义或继承了finalize()方法,则JVM将执行
以下:
JVM将创建实例
JVM还将创建java.lang.ref.Finalizer类的实例,指向刚刚创建的对象实例(并指向
将由GC放入的队列)
java.lang.ref.Finalizer类保留刚刚创建的java.lang.ref.Finalizer实例(因此,
保持生命,否则没有什么可以保持生命,而是
在下一个GC中进行GC处理)。
因此,要回答您的问题:“ finalize()”是您要做的事情(在GC期间自定义对象的清除行为); “最终化”是JVM创建的对象(以促进和管理该清理)。
由于许多原因,包括performance和security,除非绝对必要,否则创建自己的自定义终结器通常不是一个好主意。