2009-10-27 64 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