91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS中的內存泄漏與垃圾回收機制實例分析

發布時間:2022-03-14 15:27:49 來源:億速云 閱讀:136 作者:iii 欄目:web開發

今天小編給大家分享一下JS中的內存泄漏與垃圾回收機制實例分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

JS中的內存泄漏是什么?

內存泄漏:就是用動態存儲分配函數動態開辟的內存空間,使用完后沒有及時回收,導致一直占據著內存單元,數量多了后就會造成內存泄漏

JS中的垃圾回收是什么?

垃圾回收機制,就是不定期的尋找到不再使用的變量,然后釋放掉他們所指向的內存,防止內存泄漏

總結:垃圾回收雖然可以找到一些不再使用的局部變量回收,但是它無法對全局變量、Dom元素引用、閉包等進行回收處理,所以這也是導致內存泄漏的一個重要原因。

下面向大家介紹一下垃圾回收的兩個算法:

一、引用計數

IE采用的引用計數算法, 定義了“內存不再使用”這個標準,當一個對象沒有其它任何變量指向它的時候,就說明這個對象以及不再被使用了,此時會進行垃圾回收釋放內存空間。舉個例子:

// 創建一個對象person, person指向一塊內存空間, 該內存空間的引用數 +1

let person = {

age: 22,

name: 'ifcode'

}

let p = person // 兩個變量指向一塊內存空間, 該內存空間的引用數為 2

person = 1 // 原來的person對象被賦值為1,對象內存空間的引用數-1,

// 但因為p指向原person對象,還剩一個對于對象空間的引用, 所以對象它不會被回收

p = null // 原person對象已經沒有引用,會被回收

但是引用技術有一個致命的弊端就是:無法解決循環引用的問題。

如果兩個對象相互引用,及時他們已經不再使用了,垃圾回收器也不會對他們進行處理,導致內存泄漏:

 上圖中對象o1與對象o2進行了循環引用,當代碼執行完畢后,o1和o2未被引用就會釋放掉,但是o1里面的a可以通過o1和o2.a同時訪問到,此時就出現了循環引用的問題,雖然o1和o2兩個對象被釋放掉了,但對象里面的兩個a還是互相引用的狀態,瀏覽器會誤以為這兩塊內存仍然被使用著,此時就造成了內存泄漏。

二、標記清除

上面講到了因為引用技術有循環引用這個隱藏大bug,所以當下它已經不再被使用了,目前瀏覽器采用的垃圾回收算法是標記清除

標記清除法:將“不再使用大的對象”這個概念修改為“無法達到的對象”

就是說凡是從根部能到達的對象都還是使用的,那些無法由根部(JS全局中)出發觸及到的對象被標記為不再使用,稍后進行回收。

以上就是“JS中的內存泄漏與垃圾回收機制實例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

岳池县| 天柱县| 阿鲁科尔沁旗| 闽清县| 锡林郭勒盟| 苏尼特左旗| 宁化县| 南溪县| 五台县| 济宁市| 波密县| 牙克石市| 靖西县| 宁晋县| 额济纳旗| 厦门市| 通化县| 稷山县| 虎林市| 临汾市| 英吉沙县| 阿瓦提县| 额尔古纳市| 灯塔市| 富蕴县| 永德县| 上饶市| 社会| 巫溪县| 孝感市| 保定市| 老河口市| 姜堰市| 高陵县| 阜南县| 台江县| 石家庄市| 双桥区| 康保县| 潜山县| 纳雍县|