Java面试问题:finalize()方法

2022-09-01 11:25:34

在一次采访中,我得到了以下短语:

调用 Object 的 finalize() 方法是在对对象进行垃圾回收之前发生的最后一件事。

我不得不通过以下方式回答:

我选择了,但这是错的。你能解释一下为什么吗?True


答案 1

顺序不同:

  1. 首先收集对象。
  2. 然后,对象完成

查看 http://java.dzone.com/articles/ocajp-7-object-lifecycle-java

对象生命周期:

  1. 创建
  2. 使用中(强力可达)
  3. 无形
  4. 遥 不可 及
  5. 收集
  6. 完成
  7. 已解除分配

答案 2

我认为这暗示了这样一个事实,即在GC真正丢弃它之前,实际上还有其他事情可以对对象进行/发生。

引用参考文献:

[...]finalize 方法可以执行任何操作,包括使此对象再次可供其他线程使用;但是,Finalize 的通常目的是在不可撤销地丢弃对象之前执行清理操作。例如,表示输入/输出连接的对象的 finalize 方法可能会执行显式 I/O 事务以在永久丢弃对象之前断开连接。[...]

因此,从这个角度来看,最终确定过程并不是GC丢弃它之前的最后一件事。