2012-06-14 50 views
3

我在一個遊戲工作,並且我看到了很多內存消耗,即時使用jquery動畫,並且動畫完成後,我.remove()元素,我的問題是,刪除元素來自dom樹,該對象仍然存在於內存中?JQuery刪除和內存泄漏

回答

8

JavaScript是一種垃圾收集語言。這意味着當沒有代碼保存對它的引用時,內存中的對象將被釋放,並且(對於DOM對象)它不在DOM中。所以,當你從DOM中刪除一個對象時,只要你的javascript的其他部分沒有對該DOM對象的引用,那麼DOM對象將被清除,並且當垃圾收集器得到運行的機會。

請記住,當內存被垃圾收集器釋放時,它可能不會立即返回到系統。它可能保留爲分配給瀏覽器的內存,但可供瀏覽器內的其他內存請求使用。因此,釋放腳本中的內存不一定會使瀏覽器使用的內存總量減少。

如果一再重複執行相同的操作會導致瀏覽器使用的總內存不斷上升,那麼這隻會導致內存泄漏。只有這樣,你才能確定某些內存被「泄漏」永久消耗掉了。

關於垃圾收集有很多細微之處,特別是對於舊版本的IE,但對於現代瀏覽器,大多數情況下需要牢記的是,如果您在自己的JavaScript數據結構中持有對象的引用,它不會被垃圾收集。如果你沒有引用它,並且它不在DOM中,它將被釋放並且其內存被回收。

+1

+1關於瀏覽器使用的總內存不會下降的好處 –

4

如果沒有對元素的引用,垃圾收集將在下次運行時清除它。你只需使用.remove就好了,但不要擔心垃圾收集。