真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

瀏覽器中垃圾回收機(jī)制的示例分析

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

成都創(chuàng)新互聯(lián)公司成立以來不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點(diǎn),以客戶需求中心、市場為導(dǎo)向”的快速反應(yīng)體系。對公司的主營項(xiàng)目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計(jì)、行業(yè) / 企業(yè)門戶設(shè)計(jì)推廣、行業(yè)門戶平臺運(yùn)營、重慶APP開發(fā)公司成都手機(jī)網(wǎng)站制作、微信網(wǎng)站制作、軟件開發(fā)、成都電信服務(wù)器托管等實(shí)行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從成都創(chuàng)新互聯(lián)公司可以獲得的服務(wù)效果。

瀏覽器的垃圾回收機(jī)制

垃圾回收是一種自動的內(nèi)存管理機(jī)制。當(dāng)計(jì)算機(jī)上的動態(tài)內(nèi)存不再需要時(shí),就應(yīng)該予以釋放。

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

由于字符串,數(shù)組,對象等都沒有固定大小,因此需要當(dāng)它們大小已知時(shí),才能對他們進(jìn)行動態(tài)的存儲分配。JavaScript程序每次創(chuàng)建字符串,數(shù)組或?qū)ο髸r(shí),解釋器都必須分配內(nèi)存來存儲那個(gè)實(shí)體。

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

瀏覽器通常采用的垃圾回收有兩種方法:標(biāo)記清除,引用計(jì)數(shù)。

標(biāo)記清除

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

從2012年起,所有現(xiàn)代瀏覽器都使用了標(biāo)記清除的垃圾回收方法,除了低版本IE還是采用的引用計(jì)數(shù)法。

那么什么叫標(biāo)記清除呢?

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

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

在標(biāo)記的過程中,引入了概念:三色標(biāo)記法,三色為:

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

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

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

標(biāo)記整理:

標(biāo)記階段與標(biāo)記清除法沒什么區(qū)別,只是標(biāo)記結(jié)束后,標(biāo)記整理法會將存活的對象向內(nèi)存的一邊移動,最后清理掉邊界內(nèi)存。

引用計(jì)數(shù)

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

大多數(shù)瀏覽器已經(jīng)放棄了這種回收方式

內(nèi)存泄漏

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

哪些情況會造成內(nèi)存泄漏?如何避免?

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

  • 監(jiān)聽在 window/body 等事件沒有解綁

  • 綁在 EventBus 的事件沒有解綁

  • Vuex 的 $store,watch 了之后沒有 unwatch

  • 使用第三方庫創(chuàng)建,沒有調(diào)用正確的銷毀函數(shù)

解決辦法:beforeDestroy 中及時(shí)銷毀

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

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

  • 如果組件中使用了定時(shí)器,應(yīng)銷毀處理。

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

  • 使用弱引用 weakMap、weakSet。

瀏覽器中不同類型變量的內(nèi)存都是何時(shí)釋放的?

  • 引用類型

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

  • 基本類型

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

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

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


當(dāng)前名稱:瀏覽器中垃圾回收機(jī)制的示例分析
文章地址:http://weahome.cn/article/jeoods.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部