2009-10-27 72 views
1

我有一个具有父子关系的复合对象(树)。树可以达到n个级别(例如对于例如10-12个级别)复合对象中的父子关系?

现在假设我必须删除层次结构中级别6的对象。如果我在Java中将它的引用指向null(同时将子对象保持原样),那么它下面的子对象会发生什么(它们是否可用于垃圾回收)。

回答

0

只有当你设置的对象本身为空,或者超出范围。

+0

这是不对的。你不能设置“对象本身为空”,你只能设置它的引用;这是可以超出范围的参考。这些事件都不能使对象符合GC的条件;可以有其他参考。 – ChssPly76 2009-10-27 20:04:55

+0

感谢您的语义课 - 上次我检查对象o = null工作。 – Gandalf 2009-10-27 20:08:34

+1

真的吗? 'Object o1 = new Object();对象o2 = o1; o1 = null;'。这会工作吗?你还认为这只是语义? – ChssPly76 2009-10-27 20:29:29

2

子对象将由垃圾收集得到拿起如果父母有参考是唯一的活引用到子对象在整个应用程序。

+0

这并非完全正确。首先,他们将成为**符合条件的垃圾回收** - 当**和**没有告诉时**如果**他们实际上将被垃圾收集。其次,你可以有其他的引用子对象,并仍然有资格使用GC - 关键是说引用应该是**无法访问**。 – ChssPly76 2009-10-27 19:58:38

+0

真对符合条件的一部分,而不是它的问题从开发商POV得多,因为它是尽可能你可以永远做垃圾回收发生自己。关于无法到达的部分也是如此,但这就是为什么我称它为“活”的参考;-)。 – NickDK 2009-10-27 20:12:10

+0

够公平的。 “Live”可能会被误解为“not null”,这就是我评论的原因。 – ChssPly76 2009-10-27 20:37:42