2015-04-30 92 views
3

我想清除BST以便利用垃圾收集器。所以,要清除BST,將根設置爲空就足夠了,這樣我最終會得到一堆沒有指向它們的廢棄節點?或者更好地將每個節點設置爲空?清除垃圾收集BST的最佳方法是什麼?

  1. 這兩種方法是否相同?
  2. 其中一人會導致內存泄漏?
  3. 垃圾收集比其他垃圾收集得快嗎?

我也很關心弱引用和強引用等

+2

也不應該是必要的,只要BST變得無法訪問。你所提出的與利用垃圾收集器相反,這是垃圾收集器應該避免的那種手動內存管理。 – user2357112

+0

TreeMap是java中的BST(紅黑樹)實現。將BST映射參考設置爲null,以使其收集垃圾。很難預測GC如何收集地圖中的每個對象。 – K139

+0

你把'root root'設置爲null是什麼意思?如果將所有引用記錄爲BST的引用設置爲空,那麼觸發GC就足夠了。不知道性能,但你可以測試它我猜。 – kiruwka

回答

1

不能由任何活動線程達到將有資格進行垃圾收集任何對象。

基礎上:

  1. 是。
  2. 編號
  3. 取決於GC的實施。無論如何,作爲一名Java程序員,你無法控制它。你所能做的就是相信它能夠很好地完成工作。另外,將root設置爲null是O(1),而將所有引用歸零爲O(n),其中n是節點的數量。

結論:

只需設置root爲null,讓GC遍歷的好時機樹爲他:)