日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入解讀JavaScript內(nèi)存回收機制

JavaScript語言是一門優(yōu)秀的腳本語言.其中包含腳本語言的靈活性外還擁有許多高級語言的特性.例如充許構(gòu)建和實例化一個對象,垃圾回收機制(GC:Garbage Collecation).通常我們使用new創(chuàng)建對象,GC負(fù)責(zé)回收對象占用內(nèi)存區(qū)域.因此了解GC,可以加深對JavaScript垃圾回收機制的理解。

成都創(chuàng)新互聯(lián)成都企業(yè)網(wǎng)站建設(shè)服務(wù),提供網(wǎng)站設(shè)計制作、成都做網(wǎng)站網(wǎng)站開發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設(shè)計,成都響應(yīng)式網(wǎng)站建設(shè),網(wǎng)頁設(shè)計師打造企業(yè)風(fēng)格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務(wù)。歡迎咨詢做網(wǎng)站需要多少錢:18982081108

1.用局部變量和全局變量解釋GC

GC在回收內(nèi)存時,首先會判斷該對象是否被其它對象引用.在確定沒有其它對象引用便釋放該對象內(nèi)存區(qū)域.因此如何確定對象不再被引用是GC的關(guān)鍵所在.

 
 
 
  1.   

如上代碼中,執(zhí)行完cc()后a1被回收了,此后我們可以通過b1.rr彈出文字窗口.在一些基礎(chǔ)書籍中解釋為:a1為局部變量,b1是全局變量.局部變量執(zhí)行完后會被GC回收.但不全是這樣,如下代碼:

 
 
 
  1.   

此時cc函數(shù)中的 a1,b1都是局部變量,但仍然會彈出文字窗口.說明b1并沒有被GC回收.因此JavaScript中局部變量不是所有時候都被GC回收的.

2.抽象理解GC

GC回收機制還需要近一步了解。在此時引入幾個概念:雙向鏈表,作用域鏈,活動對象(為了方便理解,簡化了原文的概念

Javascript閉包(closure) 深入淺出 , 其中雙向鏈表描述復(fù)雜對象的上下層級關(guān)系. 作用域鏈與活動對象分別是雙向鏈表中的某個節(jié)點.以函數(shù)cc為例變量層級關(guān)系為:

 
 
 
  1. window<=>cc<=>a1<=>rr   
  2. <=>b1<=>rr 

(原文有詳細(xì)解釋)在執(zhí)行cc()方法時,內(nèi)存中變量的引用關(guān)系如上圖,文字解釋如下:

window的活動對象包括cc,假設(shè)window是***對象(因為運行中不會被回收)

  • cc的活動對象包括a1和b1,其作用域鏈?zhǔn)莣indow
  • a1的活動對象包括rr,其作用域鏈?zhǔn)莄c
  • b1的活動對象包括rr,其作用域鏈?zhǔn)莄c

執(zhí)行cc()時,cc的執(zhí)行環(huán)境會創(chuàng)建一個活動對象和一個作用域鏈.其局部變量a1,b1都會掛在cc的活動對象中.當(dāng)cc()執(zhí)行完畢后,執(zhí)行環(huán)境會嘗試回收活動對象占用的內(nèi)存.但因局部變量b1 通過return b1,為其增加了一條作用域鏈:window<=>b1<=>rr,所以GC停止對b1回收.

因此如果想將一個局部變量/函數(shù)提升為全局的,為其增加一條作用域鏈就OK了。

同時控制好對象的作用域鏈也變得重要了.因作用域鏈會意外導(dǎo)致GC無法回收目標(biāo)對象.例如:

 
 
 
  1.   

原文鏈接 :http://www.cnblogs.com/a_bu/archive/2011/01/16/1936549.html


新聞名稱:深入解讀JavaScript內(nèi)存回收機制
文章URL:http://www.dlmjj.cn/article/djepoog.html