javascript垃圾收集知識點概要(二)

標記清除

Javascript中最經常使用的垃圾收集方式是標記清除(mark-and-sweep)。當變量進入環境(例如,在函數中聲明一個變量)時,就將這個變量標記爲「進入環境」,永遠不能釋放進入環境的變量所佔用的內存,由於只要執行流進入相應的環境,就可能會用到他們。而當變量離開環境時,則將其標記爲「離開環境」。函數

可使用任何方式來標記變量。好比,能夠經過翻轉某個特殊的位來記錄一個變量什麼時候進入環境,或者使用一個「進入環境的」變量列表及一個「離開環境的」變量列表來跟蹤哪一個變量發生了變化。說到底,如何標記變量其實並不重要,關鍵在於採起什麼策略。ip

垃圾收集器在運行的時候會給存儲在內存中的全部變量都加上標記(固然,可使用任何標記方式)。而後,他會在去掉環境中的變量以及被環境中的變量引用的變量的標記。而在此以後仍帶有標記的變量將被視爲準備刪除的變量,緣由是環境中的變量已經沒法訪問到這些變量了。最後,垃圾收集器完成內存清除工做,銷燬那些帶標記的值並回收他們所佔用的內存空間。內存

到2008年爲止,IE、Firefox、Opera、Chrome和Safari的JavaScript實現使用的都是標記清除式的垃圾收集策略(或相似的策略),只不過垃圾收集的時間間隔互有不一樣。變量

相關文章
相關標籤/搜索