为什么java中的finalize()方法不在Finalizer类中? 为什么在Object Class中定义它?
答案 0 :(得分:4)
"终结者" class,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,除非您绝对要创建自己的自定义终结器,否则它通常是错误的想法必须。
答案 1 :(得分:3)
查看方法finalize()
对象上的垃圾收集器调用(该对象可能是任何对象,这就是为什么它在对象类中而不是在终结器类中声明的)垃圾收集时 确定没有对该对象的更多引用。
可以在任何类上覆盖此方法,以指定垃圾回收器收集给定对象时要执行的操作。