js具備自動垃圾回收機制,換句話說,執行環境會管理代碼執行過程當中使用的內存。chrome
執行環境會找出那些再也不繼續使用的變量,而後釋放其佔用的內存。瀏覽器
當變量進入環境時,就將這個變量標記爲「進入環境」,而當變量離開環境時,則將其標記爲「離開環境」。函數
標記變量方式看具體的實現,可使用一個「進入環境」的變量列表和一個「離開環境」的變量列表來跟蹤哪一個變量發生了變化。post
使用過標記清除的瀏覽器有IE,Firefox,chrome。性能
這是一種不太常見的垃圾回收的策略,它就是跟蹤每個值被引用的次數。spa
當聲明瞭一個變量a並將一個引用類型值({name:'cc'})賦給該變量時,則這個值的引用次數就是1,若是a({name:'cc'})又賦給另外一個變量b,則該值的引用次數加1。反之,若是a賦值{name:'xx'},則{name:'cc'}這個值的引用次數減1。當{name:'cc'}這個值的引用的次數變爲0時,則說明沒有辦法再訪問{name:'cc'}這個值了,於是能夠將其佔用的內存空間回收。這樣,當垃圾回收器工做的時候,{name:'cc'}這個值佔用的內存空間就會被回收。code
這種方式曾今被Netscape Navigator 3.0使用過,可是有一個嚴重問題:循環引用。blog
function circleUseProbem(){ let objectA = new Object() let objectB = new Object() objectA.someOtherObject = objectB objectB.anotherObject = objectA }
執行這個函數後,由於這兩個引用值的引用次數永遠不會爲0,垃圾回收器永遠不會回收它們佔用的內存空間。內存
由於js垃圾回收器是每隔一個週期就執行一次垃圾回收。ci
若是爲變量分配的內存數量不大的話,那麼垃圾回收器的回收工做量就不大。可是,當垃圾回收器的工做量過大的時候,就極可能會出現卡頓的狀況。
謝謝閱讀!