中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)頁制作 > GC與JS內(nèi)存泄露
WEB移動(dòng)應(yīng)用框架構(gòu)想 回到列表 三談Iframe自適應(yīng)高度
 GC與JS內(nèi)存泄露

作者:alucard 時(shí)間: 2010-09-21 文檔類型:轉(zhuǎn)載 來自:alibaba.com中國(guó)站

第 1 頁 GC與JS內(nèi)存泄露 [1]
第 2 頁 GC與JS內(nèi)存泄露 [2]
第 3 頁 GC與JS內(nèi)存泄露 [3]
第 4 頁 GC與JS內(nèi)存泄露 [4]
第 5 頁 GC與JS內(nèi)存泄露 [5]
第 6 頁 GC與JS內(nèi)存泄露 [6]

Javascript有沒有內(nèi)存泄露?如果有,如何避免?鑒于最近有好幾個(gè)人問到我類似的問題,看來大家對(duì)這部分內(nèi)容還沒有系統(tǒng)的研究過,因此,打算在這里把個(gè)人幾年前整理的一些資料和大家分享一下。

首先,可以肯定的說,javascript的一些寫法會(huì)造成內(nèi)存泄露的,至少在IE6下如此。因此,在IE6遲遲不肯退休的今天,我們還是有必要了解相關(guān)的知識(shí)(雖然大部分情況下,js造成的這點(diǎn)內(nèi)存泄露不是致使電腦運(yùn)行變慢的主要原因)。相關(guān)的研究主要集中在05-07這幾年,本文并沒有什么新的觀點(diǎn),如果當(dāng)年有研究過的朋友,可以直接忽略。

作為前端開發(fā)人員,了解這些問題的時(shí)候,需要知其然也知其所以然,因此,在介紹js內(nèi)存泄露前,我們先從為什么會(huì)有內(nèi)存泄露談起。

說道內(nèi)存泄露,就不得不談到內(nèi)存分配的方式。內(nèi)存分配有三種方式,分別是:

一、靜態(tài)分配( Static Allocation ):靜態(tài)變量和全局變量的分配形式。如果把房間看做一個(gè)程序,我們可以把靜態(tài)分配的內(nèi)存當(dāng)成是房間里的耐用家具。通常,它們無需釋放和回收,因?yàn)闆]人會(huì)天天把大衣柜當(dāng)作垃圾扔到窗外。

二、自動(dòng)分配( Automatic Allocation ):在棧中為局部變量分配內(nèi)存的方法。棧中的內(nèi)存可以隨著代碼塊退出時(shí)的出棧操作被自動(dòng)釋放。

這類似于到房間中辦事的人,事情一旦完成,就會(huì)自己離開,而他們所占用的空間,也隨著這些人的離開而自動(dòng)釋放了。

三、動(dòng)態(tài)分配( Dynamic Allocation ):在堆中動(dòng)態(tài)分配內(nèi)存空間以存儲(chǔ)數(shù)據(jù)的方式。也就是程序運(yùn)行時(shí)用malloc或new申請(qǐng)的內(nèi)存,我們需要自己用free或delete釋放。動(dòng)態(tài)內(nèi)存的生存期由程序員自己決定。一旦忘記釋放,勢(shì)必造成內(nèi)存泄露。這種情況下,堆中的內(nèi)存塊好像我們?nèi)粘J褂玫牟徒砑,用過了就得扔到垃圾箱里,否則屋內(nèi)就會(huì)滿地狼藉。因此,懶人們做夢(mèng)都想有一臺(tái)家用機(jī)器人跟在身邊打掃衛(wèi)生。在軟件開發(fā)中,如果你懶得釋放內(nèi)存,那么你也需要一臺(tái)類似的機(jī)器人——這其實(shí)就是一個(gè)由特定算法實(shí)現(xiàn)的垃圾收集器。而正是垃圾收集機(jī)制本身的一些缺陷,導(dǎo)致了javascript內(nèi)存泄露。

幾年前看過一篇叫《垃圾回收趣史》的文章,里面對(duì)垃圾回收機(jī)制進(jìn)行了深入淺出的說明。

就像機(jī)械增壓這種很多豪車作為賣點(diǎn)的技術(shù),其實(shí)上個(gè)世紀(jì)10年代奔馳就在使用了一樣,垃圾回收技術(shù)誕生也有很長(zhǎng)的時(shí)間了。1960 年前后誕生于 MIT 的 Lisp 語言是第一種高度依賴于動(dòng)態(tài)內(nèi)存分配技術(shù)的語言,Lisp 中幾乎所有數(shù)據(jù)都以“表”的形式出現(xiàn),而“表”所占用的空間則是在堆中動(dòng)態(tài)分配得到的。 Lisp 語言先天就具有的動(dòng)態(tài)內(nèi)存管理特性要求 Lisp 語言的設(shè)計(jì)者必須解決堆中每一個(gè)內(nèi)存塊的自動(dòng)釋放問題(否則, Lisp 程序員就必然被程序中不計(jì)其數(shù)的 free 或 delete 語句淹沒),這直接導(dǎo)致了垃圾收集技術(shù)的誕生和發(fā)展。

而三種最基本的垃圾回收算法,也在那個(gè)時(shí)候一起出現(xiàn)了。下面我們一個(gè)一個(gè)了解一下:

引用計(jì)數(shù)(Reference Counting)算法:這個(gè)可能是最早想到的方法。形象點(diǎn)說,引用計(jì)數(shù)可以這么理解,房子里放了很多白紙,這些紙就好比是內(nèi)存。使用內(nèi)存,就好比在這些紙上寫字。內(nèi)存可以隨便使用,但是,有個(gè)條件,任何使用一張紙的人,必須在紙的一角寫上計(jì)數(shù)1,如果2個(gè)人同時(shí)使用一張紙,那么計(jì)數(shù)就變成2,以此類推。當(dāng)一個(gè)人使用完某張紙的時(shí)候,必須把角上的計(jì)數(shù)減1,這樣,一旦當(dāng)計(jì)數(shù)變?yōu)?,就滿足了垃圾回收條件,等在一旁的機(jī)器人會(huì)立即把這張紙扔進(jìn)垃圾箱。基于引用計(jì)數(shù)器的垃圾收集器運(yùn)行較快,不會(huì)長(zhǎng)時(shí)間中斷程序執(zhí)行,適宜地必須 實(shí)時(shí)運(yùn)行的程序。但引用計(jì)數(shù)器增加了程序執(zhí)行的開銷;同時(shí),還有個(gè)最大的問題,這個(gè)算法存在一個(gè)缺陷,就是一旦產(chǎn)生循環(huán)引用,內(nèi)存就會(huì)被泄露。舉個(gè)例子,我們new了2個(gè)對(duì)象a和b,這時(shí),a和b的計(jì)數(shù)都是1,然后,我們把a(bǔ)的一個(gè)屬性指向b,b的一個(gè)屬性指向a,此時(shí),由于引用的關(guān)系,a和b的計(jì)數(shù)都變成了2,當(dāng)程序運(yùn)行結(jié)束時(shí),退出作用域,程序自動(dòng)把a(bǔ)的計(jì)數(shù)減1,由于最后a的計(jì)數(shù)仍然為1,因此,a不會(huì)被釋放,同樣,b最后的計(jì)數(shù)也為1,b也不會(huì)被釋放,內(nèi)存就這么泄露了!

出處:alibaba.com中國(guó)站
責(zé)任編輯:bluehearts

上一頁 下一頁 GC與JS內(nèi)存泄露 [2]

◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。

相關(guān)文章 更多相關(guān)鏈接
HTML,CSS和JavaScript速查表
JavaScript異步方法隊(duì)列鏈
JavaScript框架比較
JavaScript框架比較:框架比較
JavaScript框架比較:用戶體驗(yàn)
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:1/61個(gè)記錄/頁 轉(zhuǎn)到 頁 共6個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2