在一次采访中,我得到了以下几句话:
对象的finalize()方法的调用是在收集对象之前发生的最后一件事。
我不得不回答:
我选择了True,但这是错误的。你能解释一下为什么吗?
发布于 2010-07-22 08:12:58
顺序是不同的:
请参阅http://java.dzone.com/articles/ocajp-7-object-lifecycle-java
对象生命周期:
)
发布于 2010-07-22 08:12:14
我认为这暗示了这样一个事实,即在GC真正放弃对象之前,实际上还有其他事情可以做/发生。
引用引用的:
...The finalize方法可以采取任何操作,包括将此对象再次提供给其他线程;但是,finalize的通常目的是在对象不可撤销地丢弃之前执行清理操作。例如,表示输入/输出连接的对象的finalize方法可能执行显式I/O事务,以便在对象被永久丢弃之前中断连接。
因此,在GC放弃它之前,最后的过程并不是最后一件事。
发布于 2010-07-22 08:10:58
不能保证finalize()总是会被调用,甚至垃圾收集也会运行。
假设您的程序结束(要么通过调用System.exit(),要么当所有正在运行的线程都到达它们的末端),那么JVM就会退出,它不会清理所有的东西并调用所有对象上的finalize()。
因此,将绝对必须在finalize()方法中运行的清理任务放在一起并不是一个好主意。
https://stackoverflow.com/questions/3306883
复制相似问题