首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java面试问题: finalize()方法

Java面试问题: finalize()方法
EN

Stack Overflow用户
提问于 2010-07-22 08:07:46
回答 6查看 5.3K关注 0票数 30

在一次采访中,我得到了以下几句话:

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

我不得不回答:

  • True
  • False

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-22 08:12:58

顺序是不同的:

  1. First对象是collected.
  2. Then,对象是finalized.

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

对象生命周期:

  1. Created
  2. In使用(强reachable)
  3. Invisible
  4. Unreachable
  5. Collected
  6. 定稿
  7. Deallocated

)

票数 59
EN

Stack Overflow用户

发布于 2010-07-22 08:12:14

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

引用引用的

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

因此,在GC放弃它之前,最后的过程并不是最后一件事。

票数 8
EN

Stack Overflow用户

发布于 2010-07-22 08:10:58

不能保证finalize()总是会被调用,甚至垃圾收集也会运行。

假设您的程序结束(要么通过调用System.exit(),要么当所有正在运行的线程都到达它们的末端),那么JVM就会退出,它不会清理所有的东西并调用所有对象上的finalize()

因此,将绝对必须在finalize()方法中运行的清理任务放在一起并不是一个好主意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3306883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档