可能重複:
Garbage Collection in Java and Circular References通過創建循環鏈表來防止Java垃圾回收?
運行的Java它的垃圾收集每當有沒有在內存足夠的空間。它通過刪除未引用的對象來實現。那麼如果一個對象有一個指向它自己的指針,或者任何總是有指向它的循環指針結構呢?垃圾收集器會失敗還是會承認我們爲了使其失敗而做出的任何這種陰險的嘗試?
可能重複:
Garbage Collection in Java and Circular References通過創建循環鏈表來防止Java垃圾回收?
運行的Java它的垃圾收集每當有沒有在內存足夠的空間。它通過刪除未引用的對象來實現。那麼如果一個對象有一個指向它自己的指針,或者任何總是有指向它的循環指針結構呢?垃圾收集器會失敗還是會承認我們爲了使其失敗而做出的任何這種陰險的嘗試?
是否將收集的對象依賴於垃圾收集算法
垃圾收集器會收集那些無法訪問從根集的引用(當前的局部變量,靜態引用,棧幀的操作數堆棧)的對象。這意味着即使是其他對象引用的對象仍然可以收集。
因此,即使每個對象都被引用,如果沒有其他引用路徑從根集合傳遞到構成循環的對象,您的循環指針結構將被收集到。
Java垃圾收集器不會收回被指向靜態或局部變量,或從這些對象鏈接(遞歸)的任何物體對象的任何記憶。因此,如果有大型鏈接的對象樹,如果存在指向樹或循環的任何根的變量,則垃圾收集器將不會回收該空間。
用於在一個循環中鏈接的對象的存儲器將被只要沒有靜態或局部變量指向在循環的對象再生。因此,如果您希望垃圾收集有效地工作,請務必在不再需要對象時清空變量。
垃圾回收器檢測,而並不關心,如果對象是在循環的方式聯繫在一起的。唯一關乎對象是否可以從變量到達的問題。
「A引用對象B和B引用A」被稱爲隔離的島。 GC足夠聰明,可以檢測到這些事情。如果在一個島上任何對象沒有提到整個島嶼是符合垃圾收集
使用上述問題搜索答案並不會將您帶入剛纔提到的問題,還是它?無論如何感謝您的鏈接。 –
會發生什麼是這個問題將被關閉,然後搜索這個問題將有一個鏈接到前面的問題。 (你的問題沒有被降低,所以你不會失去任何代表點...) –