2010-04-15 102 views
6

我在想Ruby是否有類似的.finalize()方法,標記它們已準備好進行垃圾回收。如果我要創建20,000個對象,並且每個實例都有一個計數器,我希望該對象在達到零時標記爲垃圾收集。我知道這幾乎是一種Java方法,但我並沒有足夠的經驗來了解Ruby如何做得更好。Ruby:標記垃圾回收的對象

感謝您的回答,評論和反饋!

+2

finalize不標記垃圾回收的對象,它是在GC刪除對象之前運行的一種方法(雖然沒有保證) – pablochan 2010-04-15 10:20:05

+0

這很好,謝謝你指出。有沒有明確的破壞物體的具體方法,或者至少把這個問題置於運動中?我喜歡魔術,但我也喜歡瞭解暴露的技巧。 – Shyam 2010-04-15 10:34:47

+1

你只需要刪除對象e的所有引用。 G。如果你有一個引用x,你只需將它設置爲null,或者你有一個局部變量,它就會超出範圍。如果沒有引用的對象,它可用於GC。 – pablochan 2010-04-15 15:36:51

回答

7

據我所知,你不能標記對象準備GC,但你可以隨時強制GC:

GC.start 

如果該項目能夠被釋放,它會被釋放。

+5

不再是真的,因爲核磁共振成像1.9.3介紹了懶惰掃描GC – glebm 2012-11-21 14:52:11

+1

雖然這部分仍然如此:「你不能標記準備好GC的物體」。 Ruby使用相反的方法 - 可以到達的對象被標記爲「不要刪除」。標記階段完成後,其他所有內容都將被釋放。這並沒有改變,只是在你調用GC.start時不會立即發生 – 2013-11-14 08:02:08