變量、做用域、內存---part6

垃圾處理機制

js具備自動垃圾收集機制,也就是說, 執行環境會管理代碼執行過程當中的使用的內存。在部分編程語言中(例如C語言)開發人員的一項基本的任務就是手工跟蹤內存的使用狀況,這是形成了不少性能問題的一個根源。在寫js程序的時候,開發人員不用再關心內存的使用狀況,全部的不須要的內存垃圾都會被自動管理
js的垃圾回收機制很簡單就是找出再也不繼續使用的變量,而後釋放它所佔用的內存,js會週期性的回收這些內存,那麼咱們有一個很簡單的問題,js是怎麼判斷變量不被須要呢?
還記得咱們以前說過「堆」和「棧」的概念麼?其實奧祕就在這裏面,全部咱們能引用到的變量都是存放在棧中的堆的引用(畫個圖吧)

也就是說咱們在引用的變量都僅僅是內存中變量的映射,而不可能直接用內存中的變量,而在每次引用的時候堆中的變量都會被打上一個標記,打上標記以後就表明它被引用這。 因此JS就週期性的查看內存中各個堆的變量是否有標記,若是沒有就表明着外面棧中徹底沒有人在用,就該被清除掉了
上面的文字說的很簡單,單具體到瀏覽器實現的方式上有兩個策略:

標記清除
這是最經常使用的垃圾收集方式,當變量進入環境的時候將這個變量標記爲「進入環境」。js永遠不能釋放進入環境的變量所佔得內存,由於只要進入了相應的環境就有可能會用到它,最後當變量離開環境的時候就標記成「離開環境」,等待js週期性的釋放其中的內存
目前:IE,FireFox,Opera,Chrome和Safari運行的js引擎都是按照這個策略來清理內存的
引用計數
這種方式不是很常見,顧名思義是跟蹤每一個變量被引用的次數,當js引擎週期性的來清理緩存的時候把引用數量是0的給清除掉就能夠了 這種方式在部分老版本的IE瀏覽器中在使用
相關文章
相關標籤/搜索