关于物体生命周期的问题

时间:2011-06-30 11:29:51

标签: java object garbage-collection lifecycle

在Java中,以下是对象的生命周期

 Created
 In use (strongly reachable)
 Invisible
 Unreachable
 Collected
 Finalized
 Deallocated

我的问题是,垃圾收集在哪里适合?我们什么时候说对象是“垃圾收集”?它是在循环的最后阶段之后吗?请澄清。

2 个答案:

答案 0 :(得分:3)

我会说当对象从Unreachable到Collected时垃圾收集开始,并且当对象被释放时停止。你通常不需要太在意,除非你使用终结者,你不应该在99.999%的情况下使用终结者。

答案 1 :(得分:3)

我想稍微扩展JB Nizet给出的答案:

当对象不再存在强引用时,对象进入无法访问状态。当一个对象无法访问时,它就是候选对象。

当垃圾收集器已将对象识别为无法访问时,对象处于收集状态,并将其作为解除分配的前提进行最终处理。如果对象具有finalize方法,则将其标记为最终化。

如果对象在其finalize方法(如果有)运行后仍无法访问,则处于已完成状态。最终的对象正在等待重新分配。

解除分配状态是垃圾收集的最后一步。如果在完成上述所有工作后仍无法访问某个对象,则它是解除分配的候选对象。

查看here了解更多信息。