日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

談?wù)凧avaScript中的垃圾回收機制

瀏覽:127日期:2023-10-13 08:29:22

JavaScript 具有自動垃圾收集機制,也就是說,執(zhí)行環(huán)境會負(fù)責(zé)管理代碼執(zhí)行過程中使用的內(nèi)存。

在編寫 JavaScript 程序時,開發(fā)人員不用再關(guān)心內(nèi)存使用問題,所需內(nèi)存的分配以及無用內(nèi)存的回收完全實現(xiàn)了自動管理。

這種垃圾收集機制的原理其實很簡單:找出那些不再繼續(xù)使用的變量,然后釋放其占用的內(nèi)存。為此,垃圾收集器會按照固定的時間間隔(或代碼執(zhí)行中預(yù)定的收集時間), 周期性地執(zhí)行這一操作。

具體到瀏覽器中的實現(xiàn),則通常有兩個策略,分別為標(biāo)記清除和引用計數(shù)。

一、標(biāo)記清除

JavaScript 中最常用的垃圾收集方式是標(biāo)記清除(mark-and-sweep)。當(dāng)變量進(jìn)入環(huán)境(例如,在函數(shù)中聲明一個變量)時,就將這個變量標(biāo)記為“進(jìn)入環(huán)境”。而當(dāng)變量離開環(huán)境時,則將其標(biāo)記為“離開環(huán)境”。

垃圾收集器在運行的時候會給存儲在內(nèi)存中的所有變量都加上標(biāo)記。可以使用任何標(biāo)記方式,比如,可以通過翻轉(zhuǎn)某個特殊的位來記錄一個變量何時進(jìn)入環(huán)境, 或者使用一個“進(jìn)入環(huán)境的”變量列表及一個“離開環(huán)境的”變量列表來跟蹤哪個變量發(fā)生了變化。

然后,它會去掉環(huán)境中的變量以及被環(huán)境中的變量引用的變量的標(biāo)記。而在此之后再被加上標(biāo)記的變量將被視為準(zhǔn)備刪除的變量,原因是環(huán)境中的變量已經(jīng)無法訪問到這些變量了。

最后,垃圾收集器完成內(nèi)存清除工作,銷毀那些帶標(biāo)記的值并回收它們所占用的內(nèi)存空間。

二、引用計數(shù)

另一種不太常見的垃圾收集策略叫做引用計數(shù)(reference counting)。引用計數(shù)的含義是跟蹤記錄每個值被引用的次數(shù)。

當(dāng)聲明了一個變量并將一個引用類型值賦給該變量時,則這個值的引用次數(shù)就是 1。 如果同一個值又被賦給另一個變量,則該值的引用次數(shù)加 1。相反,如果包含對這個值引用的變量又取得了另外一個值,則這個值的引用次數(shù)減 1。

當(dāng)這個值的引用次數(shù)變成 0 時,則說明沒有辦法再訪問這個值了,因而就可以將其占用的內(nèi)存空間回收回來。

這樣,當(dāng)垃圾收集器下次再運行時,它就會釋放那些引用次數(shù)為零的值所占用的內(nèi)存。

存在的問題:只要在 IE 中涉及 COM(Component Object Model,組件對象模型)對象,就會存在循環(huán)引用的問題。如下面代碼所示:

var element = document.getElementById('some_element');var myObject = new Object();myObject.element = element;element.someObject = myObject;

這個例子在一個 DOM 元素(element)與一個原生 JavaScript 對象(myObject)之間創(chuàng)建了循環(huán)引用。

其中,變量 myObject 有一個名為 element 的屬性指向 element 對象。

而變量 element 也有 一個屬性名叫 someObject 回指 myObject。

由于存在這個循環(huán)引用,即使將例子中的 DOM 從頁面中移除,它也永遠(yuǎn)不會被回收。

解決方法:最好是在不使用它們的時候手工斷開原生 JavaScript 對象與 DOM 元素之間的連接。

myObject.element = null;element.someObject = null;

將變量設(shè)置為 null 意味著切斷變量與它此前引用的值之間的連接。當(dāng)垃圾收集器下次運行時,就會刪除這些值并回收它們占用的內(nèi)存。

三、管理內(nèi)存

確保占用最少的內(nèi)存可以讓頁面獲得更好的性能。而優(yōu)化內(nèi)存占用的最佳方式,就是為執(zhí)行中的代碼只保存必要的數(shù)據(jù)。

一旦數(shù)據(jù)不再有用,最好通過將其值設(shè)置為 null 來釋放其引用——這個做法叫做解除引用(dereferencing)。

這一做法適用于大多數(shù)全局變量和全局對象的屬性。局部變量會在它們離開執(zhí)行環(huán)境時自動被解除引用,如下面這個例子所示:

function createPerson(name){ var localPerson = new Object(); localPerson.name = name; }var globalPerson = createPerson('Nicholas');globalPerson = null; // 手工解除globalPerson 的引用

   變量 globalPerson 取得了 createPerson()函數(shù)返回的值。在 createPerson() 函數(shù)內(nèi)部,我們創(chuàng)建了一個對象并將其賦給局部變量localPerson,然后又為該對象添加了一個名為 name 的屬性。最后,當(dāng)調(diào)用這個函數(shù)時,localPerson 以函數(shù)值的形式返回并賦給全局變量 globalPerson。

由于 localPerson 在 createPerson()函數(shù)執(zhí)行完畢后就離開了其執(zhí)行環(huán)境,因此無需我們顯式地去為它解除引用。

但是對于全局變量 globalPerson 而言,則需要我們在不使用它的時候手工為它解除引用,這也正是上面例子中最后一行代碼的目的。

以上就是談?wù)凧avaScript中的垃圾回收機制的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 垃圾回收的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧美一级| 国产a久久精品一区二区三区| 日韩成人综合| 国产一区二区三区探花| 国产一区二区精品福利地址| 国产一区二区三区久久久久久久久| 欧美激情一区| 久久久久伊人| 久久久免费人体| 精品色999| 成人在线观看免费视频| 成人三级高清视频在线看| 色综合狠狠操| 视频福利一区| 久久精品影视| 国产日韩一区二区三区在线播放| 欧美一级久久| 麻豆视频观看网址久久| 日韩成人精品一区二区| 999久久久免费精品国产| 亚洲免费专区| 日本麻豆一区二区三区视频| 国产精品hd| 日韩啪啪电影网| 精品日韩毛片| 亚洲精品伊人| 麻豆久久久久久| 欧美日韩精品免费观看视完整 | 亚洲一区二区三区中文字幕在线观看| 蜜桃久久精品一区二区| 欧美日韩一视频区二区| 国产精品麻豆久久| 欧美日韩国产亚洲一区| 婷婷亚洲精品| 国产+成+人+亚洲欧洲在线| 久久久久久久久久久9不雅视频| 老鸭窝毛片一区二区三区| 国产毛片久久久| 亚洲精品.com| 日本一区福利在线| 久久精品国产999大香线蕉| 久久精品青草| 日本va欧美va欧美va精品| 国产精品久久久久久久免费观看| 激情婷婷综合| 国产一卡不卡| 亚洲午夜黄色| 国产日本久久| 不卡一区综合视频| 国产精品一区二区三区av| 久久精品一区二区不卡| 欧美一区不卡| 亚洲天堂成人| 国产精品亚洲一区二区在线观看| 国产日韩电影| 日韩精品视频在线看| 国产v日韩v欧美v| 水蜜桃久久夜色精品一区的特点| 欧美精品99| 悠悠资源网久久精品| 国产精品视频一区二区三区综合 | 久久黄色影院| 日本三级亚洲精品| 欧美亚洲国产精品久久| 国产亚洲欧美日韩在线观看一区二区 | 精品视频网站| 亚洲精选91| 精品国产18久久久久久二百| 日韩中文字幕一区二区三区| 国产激情在线播放| 色狠狠一区二区三区| 国产亚洲一区二区手机在线观看| 日本在线成人| 99视频一区| 在线天堂中文资源最新版| 色婷婷成人网| 日韩视频一区二区三区在线播放免费观看| 国产精品中文字幕亚洲欧美| 国产精品日本| 日韩精品不卡一区二区| 国产日韩一区二区三区在线| 亚洲一区成人| 蜜臀国产一区| 国产精品久久久久久久久免费高清 | 午夜欧美理论片| 给我免费播放日韩视频| 国产精品一级| 色综合视频一区二区三区日韩| 欧美1区免费| 国产精品久久久久久久久久10秀| 91麻豆精品激情在线观看最新 | 日韩激情一二三区| 蜜臀av免费一区二区三区| 国产激情一区| 午夜久久av | 中文字幕在线视频网站| 国产精品毛片久久久| 亚洲人成精品久久久| 狠狠爱成人网| 日本在线啊啊| 精品国产一级| 国产极品久久久久久久久波多结野| 亚洲精品影视| 爽好多水快深点欧美视频| 亚洲性视频h| 久久久久久美女精品| 日本蜜桃在线观看视频| 91嫩草亚洲精品| 国产精品videossex久久发布| 日本在线不卡视频| 亚洲最新av| 一区二区高清| 视频一区二区三区在线| 99视频一区| 99日韩精品| 亚洲一区免费| 中文在线一区| 亚洲中字黄色| 免费在线看一区| 久久aⅴ国产紧身牛仔裤| 欧美美女一区| 在线看片不卡| 国产精品日本| 中文字幕成人| 亚洲精品无播放器在线播放| 亚洲久久视频| 日韩欧美美女在线观看| 日本v片在线高清不卡在线观看| 亚洲三级网址| 91亚洲无吗| 国产精品qvod| 成人高清一区| 九色porny丨国产首页在线| 日本蜜桃在线观看视频| 国产麻豆久久| 99在线精品免费视频九九视| 久久高清免费观看| 午夜性色一区二区三区免费视频| 日韩成人在线看| 国产精品日本一区二区不卡视频 | 精品资源在线| 日本久久黄色| 亚洲www啪成人一区二区| 午夜av成人| 亚洲一区日韩在线| 日本欧美在线| 成午夜精品一区二区三区软件| 久久久噜噜噜| 久久不射中文字幕| 欧美日韩伊人| а√天堂8资源在线| 免费成人网www| 亚洲一级大片| 国产精品一区二区中文字幕| 国产精品久久久久久久免费观看 | 久久久久久美女精品| 在线午夜精品| 日韩精品久久理论片| 麻豆精品视频在线观看| 国产99久久| 亚洲性视频在线| 国产日本亚洲| 夜鲁夜鲁夜鲁视频在线播放| 九一国产精品| 日韩二区在线观看| 国产一区二区三区亚洲综合| 亚洲精品97| 91大神在线观看线路一区| 色一区二区三区四区| 羞羞答答国产精品www一本| 久久国产三级精品| 日韩在线视频精品| 免费不卡在线观看| 久久精品二区亚洲w码| 99热精品在线| 久久精品伊人| 国产视频亚洲| 久久久亚洲欧洲日产| 亚洲综合精品| 麻豆视频观看网址久久| 99视频精品| 欧美激情在线精品一区二区三区| 国户精品久久久久久久久久久不卡| 午夜精品福利影院| 日韩国产一区二区| 亚洲精品欧美| 亚洲精品国产嫩草在线观看| 综合国产视频| 亚洲涩涩在线| 国产日韩一区二区三区在线| 在线观看免费一区二区| 精品三区视频| 亚洲视频二区| 久久九九电影| 久久只有精品| 中文字幕av亚洲精品一部二部| 神马久久午夜| 国产精品入口久久| 亚洲天堂免费| 99精品视频在线观看免费播放|