5

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

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

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

2 回答 2

1

默认情况下它不做任何事情,但如果你想执行某些操作,它会给你一个拦截点

这是finalize()java.lang.Object

  protected void finalize() throws Throwable { }

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


也可以看看

于 2013-10-28T21:27:44.777 回答
0

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

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

于 2013-10-28T21:34:55.433 回答