第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

章節(jié)
問答
課簽
筆記
評論
占位
占位

內(nèi)存泄露

什么是內(nèi)存泄露?

內(nèi)存泄露是指一塊被分配的內(nèi)存既不能使用,又不能回收,直到瀏覽器進(jìn)程結(jié)束。在C++中,因?yàn)槭鞘謩庸芾韮?nèi)存,內(nèi)存泄露是經(jīng)常出現(xiàn)的事情。而現(xiàn)在流行的C#和Java等語言采用了自動垃圾回收方法管理內(nèi)存,正常使用的情況下幾乎不會發(fā)生內(nèi)存泄露。瀏覽器中也是采用自動垃圾回收方法管理內(nèi)存,但由于瀏覽器垃圾回收方法有bug,會產(chǎn)生內(nèi)存泄露。

常見內(nèi)存泄露的幾種情況

1.循環(huán)引用
2.Javascript閉包
3.DOM插入

一個DOM對象被一個Javascript對象引用,與此同時又引用同一個或其它的Javascript對象,這個DOM對象可能會引發(fā)內(nèi)存泄漏。這個DOM對象的引用將不會在腳本停止的時候被垃圾回收器回收。要想破壞循環(huán)引用,引用DOM元素的對象或DOM對象的引用需要被賦值為null。

其實(shí)絕大部分內(nèi)存泄漏都不是由Javascript引起的,瀏覽器的回收機(jī)制已經(jīng)做的相當(dāng)好了,多數(shù)的泄漏都是由于與DOM交互而產(chǎn)生的。

含有DOM對象的循環(huán)引用將導(dǎo)致大部分當(dāng)前主流瀏覽器內(nèi)存泄露

第一種:多個對象循環(huán)引用

var a=new Object;
var b=new Object;

a.r=b;
b.r=a;

第二種:循環(huán)引用自己

var a=new Object;
a.r=a;

循環(huán)引用很常見且大部分情況下是無害的,但當(dāng)參與循環(huán)引用的對象中有DOM對象或者ActiveX對象時,循環(huán)引用將導(dǎo)致內(nèi)存泄露。

我們把例子中的任何一個new Object替換成document.getElementById或者document.createElement就會發(fā)生內(nèi)存泄露了。

所以這里的總結(jié):

  ?  JS的內(nèi)存泄露,無怪乎就是從DOM中remove了元素,但是依然有變量或者對象引用了該DOM對象。然后內(nèi)存中無法刪除。使得瀏覽器的內(nèi)存占用居高不下。這種內(nèi)存占用,隨著瀏覽器的刷新,會自動釋放。

  ?  而另外一種情況,就是循環(huán)引用,一個DOM對象和JS對象之間互相引用,這樣造成的情況更嚴(yán)重一些,即使刷新,內(nèi)存也不會減少。這就是嚴(yán)格意義上說的內(nèi)存泄露了。

所以在平時實(shí)際應(yīng)用中, 我們經(jīng)常需要給元素緩存一些數(shù)據(jù),并且這些數(shù)據(jù)往往和DOM元素緊密相關(guān)。由于DOM元素(節(jié)點(diǎn))也是對象, 所以我們可以直接擴(kuò)展DOM元素的屬性,但是如果給DOM元素添加自定義的屬性和過多的數(shù)據(jù)可能會引起內(nèi)存泄漏,所以應(yīng)該要盡量避免這樣做。 因此更好的解決方法是使用一種低耦合的方式讓DOM和緩存數(shù)據(jù)能夠聯(lián)系起來。

所以我們必須有一種機(jī)制,避免引用數(shù)據(jù)直接依附在DOM對象上,這樣盡量避免內(nèi)存泄漏的產(chǎn)生。jQuery的緩存系統(tǒng)就很好的解決了這一問題。

任務(wù)

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗(yàn)證,完成請求

由于請求次數(shù)過多,請先驗(yàn)證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務(wù)號

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復(fù)提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關(guān)注公眾號
關(guān)注后,及時獲悉本課程動態(tài)

舉報(bào)

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費(fèi)2個積分

你的積分不足,無法發(fā)表

為什么扣積分?

本次提問將花費(fèi)2個積分

繼續(xù)發(fā)表請點(diǎn)擊 "確定"

為什么扣積分?