2012-05-07 82 views
8

如果我創建一個對象而不將它分配給任何東西,Javascript的垃圾何時收集這個對象?這裏是一個例子:匿名對象如何在Javascript中收集垃圾?

alert(new Date().getTime()); 

如果沒有這樣的垃圾收集完成,會導致內存泄漏?

for (var i = 0; i < 99999999; i++) { 
    console.info(new Date().getTime()); 
} 
+0

你有問題嗎? –

+1

對於你的問題的直接回答(「不再引用它們之後收集對象」和「不會引起泄漏」)可能不是你真正想要的。你真的想知道什麼? – Phrogz

+2

@AshBurlaczenko和Phrogz--我不認爲以這種方式詢問這類事情有什麼不妥。如果你想優化一些代碼,也許爲了減少內存使用量,這是一件非常好的事情要知道,並且它不必與特定問題聯繫起來。 – nickf

回答

7

如果沒有人在範圍引用匿名對象,他們會得到垃圾回收下一次GC運行。

所以,Console.info完成運行後,他們彌補垃圾收集。如果您設置了任何範圍內的變量來引用它們,那麼它們不會。

4

垃圾收集的好處是,你知道什麼時候該內存將被回收,也不應該關心的(除非它的發生過於頻繁)。

在這種情況下,運行時應該最終回收那些Date實例,但是你所做的任何事情都不會改變它的速度。此外,這不會導致內存泄漏。

4

JavaScript執行GC(垃圾收集)自動回收由字符串,對象,數組和功能,這些功能不再使用所佔用的存儲器。

垃圾回收的一個關鍵特性是垃圾回收器必須能夠確定何時回收內存是安全的。顯然, 必須從不回收仍處於使用狀態,收集 只是不再可達值的值;也就是說,不能通過程序中的任何變量,對象屬性或 數組元素來引用值。

參考:Here.