中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

瀏覽器中垃圾回收機制的示例分析

發布時間:2022-03-23 11:16:51 來源:億速云 閱讀:338 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關瀏覽器中垃圾回收機制的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

瀏覽器的垃圾回收機制

垃圾回收是一種自動的內存管理機制。當計算機上的動態內存不再需要時,就應該予以釋放。

需要注意的是,自動的意思是瀏覽器可以自動幫助我們回收內存垃圾,但并不代表我們不用關心內存管理,如果操作不當,JavaScript中仍然會出現內存溢出的情況,造成系統崩潰。

由于字符串,數組,對象等都沒有固定大小,因此需要當它們大小已知時,才能對他們進行動態的存儲分配。JavaScript程序每次創建字符串,數組或對象時,解釋器都必須分配內存來存儲那個實體。

JavaScript解釋器可以檢測到何時程序不在使用一個對象了,當它確定這個對象是無用的時候,他就知道不再需要這個對象了,就可以把它占用的內存釋放掉了。

瀏覽器通常采用的垃圾回收有兩種方法:標記清除引用計數

標記清除

這是JavaScript中最常用的垃圾回收方式

從2012年起,所有現代瀏覽器都使用了標記清除的垃圾回收方法,除了低版本IE還是采用的引用計數法。

那么什么叫標記清除呢?

JavaScript中有一個全局對象,定期的,垃圾回收器將從這個全局對象開始,找出所有從這個全局對象開始引用的對象,再找這些對象引用的對象...對這些活躍的對象標記,這是標記階段。清楚階段就是清楚那些沒有被標記的對象。

標記清除有一個問題,就是在清除之后,內存空間是不連續的,即出現了內存碎片。如果后面需要一個比較大的連續的內存空間,那將不能滿足要求。而標記整理 方法可以有效德地解決這個問題。

在標記的過程中,引入了概念:三色標記法,三色為:

  • 白:未被標記的對象,即不可達對象(沒有掃描到的對象),可回收

  • 灰:已被標記的對象(可達對象),但是對象還沒有被掃描完,不可回收

  • 黑:已被掃描完(可達對象),不可回收

標記整理:

標記階段與標記清除法沒什么區別,只是標記結束后,標記整理法會將存活的對象向內存的一邊移動,最后清理掉邊界內存。

引用計數

引用計數的含義是跟蹤記錄每個值被引用的次數。當一個變量A被賦值時,這個值的引用次數就是1,當變量A重新賦值后,則之前那個值的引用次數就減1。當引用次數變成0時,則說明沒有辦法再訪問這個值了,所以就可以清除這個值占用的內存了。

大多數瀏覽器已經放棄了這種回收方式

內存泄漏

為避免內存泄漏,一旦數據不再使用,最好通過將其值設為null來釋放其引用,這個方法叫做接觸引用

哪些情況會造成內存泄漏?如何避免?

以 Vue 為例,通常有這些情況:

  • 監聽在 window/body 等事件沒有解綁

  • 綁在 EventBus 的事件沒有解綁

  • Vuex 的 $storewatch 了之后沒有 unwatch

  • 使用第三方庫創建,沒有調用正確的銷毀函數

解決辦法:beforeDestroy 中及時銷毀

  • 綁定了 DOM/BOM 對象中的事件 addEventListener ,removeEventListener

  • 觀察者模式 $on$off處理。

  • 如果組件中使用了定時器,應銷毀處理。

  • 如果在 mounted/created 鉤子中使用了第三方庫初始化,對應的銷毀。

  • 使用弱引用 weakMapweakSet

瀏覽器中不同類型變量的內存都是何時釋放的?

  • 引用類型

    • 在沒有引用之后,通過 V8 自動回收。

  • 基本類型

    • 如果處于閉包的情況下,要等閉包沒有引用才會被 V8 回收。

    • 非閉包的情況下,等待 V8 的新生代切換的時候回收。

關于“瀏覽器中垃圾回收機制的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

西充县| 芜湖县| 承德县| 仙桃市| 北流市| 伊川县| 瑞安市| 博湖县| 崇州市| 南靖县| 静海县| 前郭尔| 余干县| 呼图壁县| 青岛市| 甘泉县| 宁安市| 剑川县| 武邑县| 获嘉县| 固原市| 财经| 青冈县| 乐平市| 雅安市| 尼勒克县| 绥中县| 台州市| 根河市| 寿阳县| 长子县| 前郭尔| 万源市| 肥城市| 沛县| 堆龙德庆县| 麻江县| 黔江区| 渑池县| 石狮市| 蚌埠市|