Java面试问题:finalize()方法

And*_*anu 29 java garbage-collection finalize

我在接受采访时得到了以下短语:

调用Object的finalize()方法是在收集对象之前发生的最后一件事.

我不得不回答:

  • 真正

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

Dan*_*ski 59

订单不同:

  1. 首先收集对象.
  2. 然后最终确定对象.

请参见http://java.dzone.com/articles/ocajp-7-object-lifecycle-java

对象生命周期:

  1. 创建
  2. 在使用中(强烈可达)
  3. 无形
  4. 无法访问
  5. 敲定
  6. 释放

  • 证实.*collect*不是对象生命周期的最终状态,它是*deallocated*.+1链接和今天学习的东西:) (2认同)

bak*_*kal 8

我认为这暗示了事实上在GC真正丢弃它之前,其他事情可以在对象上完成/发生.

引用参考:

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

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