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

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

JS中的內(nèi)存泄漏與垃圾回收機制實例分析

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

成都創(chuàng)新互聯(lián)公司長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為呼圖壁企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站建設(shè),呼圖壁網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

JS中的內(nèi)存泄漏是什么?

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

JS中的垃圾回收是什么?

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

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

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

一、引用計數(shù)

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

// 創(chuàng)建一個對象person, person指向一塊內(nèi)存空間, 該內(nèi)存空間的引用數(shù) +1

let person = {

age: 22,

name: 'ifcode'

}

let p = person // 兩個變量指向一塊內(nèi)存空間, 該內(nèi)存空間的引用數(shù)為 2

person = 1 // 原來的person對象被賦值為1,對象內(nèi)存空間的引用數(shù)-1,

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

p = null // 原person對象已經(jīng)沒有引用,會被回收

但是引用技術(shù)有一個致命的弊端就是:無法解決循環(huán)引用的問題。

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

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

二、標記清除

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

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

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

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


本文標題:JS中的內(nèi)存泄漏與垃圾回收機制實例分析
路徑分享:http://weahome.cn/article/jpijhd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部