为什么java中的finalize()方法不在Finalizer类中?为什么在Object Class中定义它?

时间:2015-08-02 17:14:02

标签: java garbage-collection finalize

为什么java中的finalize()方法不在Finalizer类中? 为什么在Object Class中定义它?

2 个答案:

答案 0 :(得分:4)

  1. "终结者" class,java.lang.ref.Finalizer和" finalizer()"方法,java.object.finalize是两个独立的,不同的东西。

  2. 正如alexey所说," finalize()",

  3.   

    您可以覆盖[finalize()] ...以指定何时执行操作   垃圾收集器收集给定的对象。

    1. " Finalizer类"的目的,角色和生命周期在这里讨论:
    2.   

      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)。

      •   
      1. 所以回答你的问题:" finalize()"是做的事情(在GC期间自定义对象的清理行为); "敲定"是 JVM 创建的对象(以便于和管理清理)。

      2. 出于多种原因,包括performancesecurity,除非您绝对要创建自己的自定义终结器,否则它通常是错误的想法必须。

答案 1 :(得分:3)

查看方法finalize()

的javadoc
  

对象上的垃圾收集器调用(该对象可能是任何对象,这就是为什么它在对象类中而不是在终结器类中声明的)垃圾收集时   确定没有对该对象的更多引用

可以在任何类上覆盖此方法,以指定垃圾回收器收集给定对象时要执行的操作。