2011-07-26 55 views
1

關於垃圾收集的效率:故意引用對象還是讓它落在範圍之外有什麼好處?如果我專門將一個Object設置爲null,JVM實際上會做什麼不同嗎?通過引用對象改善GC

擴大這個想法,正在清理軟和/或幽靈參考爲改進與GC相關的性能值得做的努力?我猜測代碼中充滿幻影引用表明一個比GC更大的問題可以解決當然。

回答

2

只有當您嘗試在之間分配時,它會被解除引用並超出範圍。

除非對象是(或者對大量數據持有唯一的間接引用),這不是很有用。

0

您明確解除引用的大多數對象將在給定方法調用結束時超出範圍。然而,在這之前甚至成爲一個問題,編譯器可能會執行逃逸分析並將其分解爲主要內容。 net out不會比編譯器或垃圾收集器更聰明。只要讓熱點讓我們覺得我們過於重要就會構成威脅。

1

首先,您最終可能會編寫代碼(不會注意到),這些代碼將繼續創建永遠不會超出範圍的對象,但這些對象在某個特定位置對您來說是垃圾。始終關注這一點,因爲它比許多人想象的更頻繁。

幫助GC可能總是一個很好的做法,雖然它可能不會產生顯着的結果。然而,理論家認爲GC是一代人的作品,理論認爲幫助GC應該很重要,因爲移除舊物件比新物件更昂貴。

+0

+1對於關於年輕人和老年人的觀點,我沒有考慮過這一點。 – JHarnach