內(nèi)存管理機(jī)制就是分配內(nèi)存管理戒良,每種編程語(yǔ)言都有它的內(nèi)存管理機(jī)制胀瞪,JavaScript的內(nèi)存管理機(jī)制是:內(nèi)存基元在變量(對(duì)象院仿,字符串等等)創(chuàng)建時(shí)分配,然后在他們不再被使用時(shí)“自動(dòng)”釋放勺届。后者被稱為垃圾回收。這個(gè)“自動(dòng)”是混淆并給JavaScript(和其他高級(jí)語(yǔ)言)開(kāi)發(fā)者一個(gè)錯(cuò)覺(jué):他們可以不用考慮內(nèi)存管理娶耍,JS內(nèi)存空間分為棧(stack)免姿、堆(heap)、池(一般也會(huì)歸類為棧中)榕酒。
其中棧存放變量养泡,堆存放復(fù)雜對(duì)象嗜湃,池存放常量,在js中的分配的內(nèi)存一般有如下的生命周期
- 內(nèi)存分配(當(dāng)我們聲明變量澜掩,函數(shù)购披,對(duì)象時(shí)系統(tǒng)自動(dòng)為他們分配內(nèi)存)
- 內(nèi)存使用(使用變量,函數(shù)等)
- 內(nèi)存回收(使用完畢肩榕,由垃圾回收機(jī)制自動(dòng)回收不再使用的內(nèi)存)
當(dāng)內(nèi)存走到最后一步的時(shí)候就開(kāi)始內(nèi)存回收刚陡,js中使用的是垃圾回收機(jī)制
垃圾回收有2種基本方式————
2. 標(biāo)記清除————
垃圾回收器會(huì)在運(yùn)行時(shí)給存儲(chǔ)在內(nèi)存中的所有變量加一個(gè)標(biāo)記,然后去除環(huán)境中的變量以及被環(huán)境中的變量所引用的變量(閉包)在這些完成后仍存在標(biāo)記的就是要?jiǎng)h除的變量了株汉,因?yàn)榄h(huán)境中的變量已經(jīng)無(wú)法訪問(wèn)到這些變量了
2. 引用計(jì)數(shù)————
引用計(jì)數(shù)的策略是跟蹤記錄每個(gè)值被使用的次數(shù)筐乳。當(dāng)聲明了一個(gè)變量并將一個(gè)引用類型賦值給該變量時(shí),這個(gè)值得引用次數(shù)就加一乔妈,如果該變量的值變成了另一個(gè)蝙云,則這個(gè)值得引用次數(shù)就減一,當(dāng)這個(gè)值的引用次數(shù)為0的時(shí)候路召,說(shuō)明沒(méi)有變量在使用勃刨,這個(gè)值無(wú)法訪問(wèn)。由此可以將其占用的空間回收股淡,這些垃圾回收器就會(huì)在運(yùn)行時(shí)清理掉引用次數(shù)為0的值占用的空間身隐,但這種方法容易引起內(nèi)存泄漏,因?yàn)檫@種方式?jīng)]有解決循環(huán)引用的問(wèn)題唯灵,所以不建議使用贾铝!
以上就是我對(duì)js的內(nèi)存機(jī)制的理解,如有錯(cuò)誤請(qǐng)聯(lián)系我進(jìn)行更改2号痢9缚!A泊伞水孩!