首頁 >web前端 >js教程 >快速理解 JavaScript 的垃圾回收

快速理解 JavaScript 的垃圾回收

Guanhui
Guanhui轉載
2020-05-25 09:38:002136瀏覽

快速理解 JavaScript 的垃圾回收

前言

JS具有自動垃圾回收機制,換句話說,執行環境會管理程式碼執行過程中使用的記憶體。

JS垃圾回收的原理

執行環境會找出那些不再繼續使用的變量,然後釋放其佔用的記憶體。

JS垃圾回收的策略

#標記清除

當變數進入環境時,就將這個變數標記為“進入環境”,而當變數離開環境時,則將其標記為“離開環境”。

標記變數方式看具體的實現,例如可以使用一個「進入環境」的變數列表和一個「離開環境」的變數列表來追蹤哪個變數發生了變化。

使用過標記清除的瀏覽器有IE,Firefox,chrome。

引用計數

這是一個不太常見的垃圾回收的策略,它就是追蹤每個值被引用的次數。

當宣告了一個變數a並將一個引用型別值({name:'cc'})賦給該變數時,則這個值的參考次數就是1,如果a({name:'cc '})再賦給另一個變數b,則該值的引用次數加1。反之,如果a賦值{name:'xx'},則{name:'cc'}這個值的引用次數減1。當{name:'cc'}這個值的引用的次數變成0時,則表示沒有辦法再存取{name:'cc'}這個值了,因而可以將其佔用的記憶體空間回收。這樣,當垃圾回收器工作的時候,{name:'cc'}這個值所佔用的記憶體空間就會被回收。

這種方式曾今被Netscape Navigator 3.0使用過,但有一個嚴重問題:循環引用。

function circleReferenceProbem(){
  let objectA = new Object()
  let objectB = new Object()
  objectA.someOtherObject = objectB
  objectB.anotherObject = objectA
}

執行這個函數後,因為這兩個引用值的參考次數永遠不會為0,垃圾回收器永遠不會回收它們所佔用的記憶體空間。

JS垃圾回收器的效能

因為JS垃圾回收器是每隔一個週期就執行一次垃圾回收。

如果為變數分配的記憶體數量不大的話,那麼垃圾回收器的回收工作量就不大。但是,當垃圾回收器的工作量過大的時候,就很可能會出現卡頓的情況。

JS中管理記憶體的建議

#1、盡量少用全域變數

2、盡可能手​​動清除變量的引用

推薦教學:《JS教學

以上是快速理解 JavaScript 的垃圾回收的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.im。如有侵權,請聯絡admin@php.cn刪除