Object.finalize()做什么?

时间:2013-10-28 21:26:35

标签: java object

finalize()是java.lang.Object类中的9个方法之一。功能状态的api文档:

  

当垃圾收集确定没有对该对象的更多引用时,由对象上的垃圾收集器调用。

  • 但是finalize()方法实际上做了什么?
  • 如果我们手动调用finalize()方法会怎样?

2 个答案:

答案 0 :(得分:1)

默认情况下它不会执行任何操作,但如果您要执行某些操作,则gives you an interception point

这是finalize()

java.lang.Object的实施
  protected void finalize() throws Throwable { }
  

finalize的一般合同是,如果JavaTM虚拟机确定不再有任何方法可以通过任何尚未死亡的线程访问此对象,则调用它,除非由于最终确定其他一些准备完成的对象或类所采取的行动。 finalize方法可以采取任何操作,包括使该对象再次可用于其他线程;但是,finalize的通常目的是在对象被不可撤销地丢弃之前执行清理操作。例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃对象之前断开连接。


另见

答案 1 :(得分:0)

我认为有一条规则:永远不会在正常情况下使用它。仅出于教育目的和调试目的,这是可以接受的。

默认情况下,它什么都不做。您可以覆盖它,以便发现您的垃圾收集器正在清理对象。但永远不要把清理逻辑放在那个方法中。因此,如果您遇到内存问题,查找是否释放特定对象的内存可能很有用。