js內(nèi)存泄露

js內(nèi)存泄露

js內(nèi)存的機制

  1. js的基本變量 boolean string number null undefined symbol 是分配在棧上的
  2. js的引用類型是分配在堆上面的
  3. 內(nèi)存泄露只會發(fā)生在對堆區(qū)

js內(nèi)存回收機制

js是用標(biāo)記清楚法出牧,部分Ie低版本使用引用計數(shù)法進(jìn)行垃圾回收

上面叫內(nèi)存泄露呢哭当?

內(nèi)存泄露就是 內(nèi)存泄漏是指我們已經(jīng)無法再通過js代碼來引用到某個對象,但垃圾回收器卻認(rèn)為這個對象還在被引用刽锤,因此在回收的時候不會釋放它 上面這句話就說成了內(nèi)存泄露的根本

下面分析一段內(nèi)存泄露的代碼

      var demo = document.getElementById('demo');;
      var username = {name: 'username'}; //在堆上面生成一個對象
      demo.onclick = function() {
        this.innerHTML = username.name; //這里面對username進(jìn)行引用
      }
      username = null; //username 置為空      var demo =    document.getElementById('demo');;
      var username = {name: 'username'}; //在堆上面生成一個對象
      demo.onclick = function() {
        this.innerHTML = username.name; //這里面對username進(jìn)行引用
      }
      username = null; //username 置為空

上面的代碼發(fā)送內(nèi)存泄露了么柜去?
確實是發(fā)生了塘砸, onclick函數(shù)里面引用username, js解析器會標(biāo)記這個堆地址在onclick里面會有引用足淆, 雖然最后我們設(shè)置username = null, onclick里面的標(biāo)記并沒有清楚尝胆,即我們無法通過代碼進(jìn)行引用到之前創(chuàng)建的username對應(yīng)的堆的這個地址丧裁,也無法清楚js解析器標(biāo)記的,onclick里面對這個堆地址的引用含衔。所以發(fā)生內(nèi)存泄露

那如何才能避免發(fā)生這樣情況呢煎娇? 有兩種,一種是保證 這個堆地址能被我們js代碼控制贪染,另外一個的話缓呛,由于是onclick發(fā)生泄露,所以我們可以 設(shè)置 onclick = null

再來看另外一個情況

function bindEvent() 
{ 
    var obj = document.createElement("XXX"); 
    obj.onclick = function(){ 
        // ... 
    } 
}

bindEvent();

上面的發(fā)送泄露了么杭隙? 發(fā)生了哟绊,注意是這個dom上面的onclick函數(shù)比較特殊,它會把
onclick函數(shù)注冊到外面去寺渗,相當(dāng)于閉包暴露在外面了匿情,所以bindEvent會創(chuàng)建一個閉包,而且對于里面生成的的obj信殊,我們是無法引用的到的炬称,所以發(fā)生了內(nèi)存泄露

參考: js的閉包和回調(diào)到底怎么才會造成真的內(nèi)存泄漏呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涡拘,一起剝皮案震驚了整個濱河市玲躯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳄乏,老刑警劉巖跷车,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橱野,居然都是意外死亡朽缴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門水援,熙熙樓的掌柜王于貴愁眉苦臉地迎上來密强,“玉大人,你說我怎么就攤上這事蜗元』虿常” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵奕扣,是天一觀的道長薪鹦。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么池磁? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任奔害,我火速辦了婚禮,結(jié)果婚禮上地熄,老公的妹妹穿的比我還像新娘舀武。我一直安慰自己,他們只是感情好离斩,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘪匿,像睡著了一般跛梗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棋弥,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天核偿,我揣著相機與錄音,去河邊找鬼顽染。 笑死漾岳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粉寞。 我是一名探鬼主播尼荆,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唧垦!你這毒婦竟也來了捅儒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤振亮,失蹤者是張志新(化名)和其女友劉穎巧还,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坊秸,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡麸祷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了褒搔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阶牍。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖站超,靈堂內(nèi)的尸體忽然破棺而出荸恕,到底是詐尸還是另有隱情,我是刑警寧澤死相,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布融求,位于F島的核電站,受9級特大地震影響算撮,放射性物質(zhì)發(fā)生泄漏生宛。R本人自食惡果不足惜县昂,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陷舅。 院中可真熱鬧倒彰,春花似錦、人聲如沸莱睁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仰剿。三九已至创淡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間南吮,已是汗流浹背琳彩。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留部凑,地道東北人露乏。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像涂邀,于是被迫代替她去往敵國和親瘟仿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容