內(nèi)存管理機(jī)制就是分配內(nèi)存管理,每種編程語言都有它的內(nèi)存管理機(jī)制,JavaScript的內(nèi)存管理機(jī)制是:內(nèi)存基元在變量(對象,字符串等等)創(chuàng)建時(shí)分配,然后在他們不再被使用時(shí)“自動(dòng)”釋放。后者被稱為垃圾回收。這個(gè)“自動(dòng)”是混淆并給JavaScript(和其他高級語言)開發(fā)者一個(gè)錯(cuò)覺:他們可以不用考慮內(nèi)存管理,JS內(nèi)存空間分為棧(stack)、堆(heap)、池(一般也會(huì)歸類為棧中)。
其中棧存放變量,堆存放復(fù)雜對象,池存放常量,在js中的分配的內(nèi)存一般有如下的生命周期
- 內(nèi)存分配(當(dāng)我們聲明變量,函數(shù),對象時(shí)系統(tǒng)自動(dòng)為他們分配內(nèi)存)
- 內(nèi)存使用(使用變量,函數(shù)等)
- 內(nèi)存回收(使用完畢,由垃圾回收機(jī)制自動(dòng)回收不再使用的內(nèi)存)
當(dāng)內(nèi)存走到最后一步的時(shí)候就開始內(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)無法訪問到這些變量了
2. 引用計(jì)數(shù)————
引用計(jì)數(shù)的策略是跟蹤記錄每個(gè)值被使用的次數(shù)。當(dāng)聲明了一個(gè)變量并將一個(gè)引用類型賦值給該變量時(shí),這個(gè)值得引用次數(shù)就加一,如果該變量的值變成了另一個(gè),則這個(gè)值得引用次數(shù)就減一,當(dāng)這個(gè)值的引用次數(shù)為0的時(shí)候,說明沒有變量在使用,這個(gè)值無法訪問。由此可以將其占用的空間回收,這些垃圾回收器就會(huì)在運(yùn)行時(shí)清理掉引用次數(shù)為0的值占用的空間,但這種方法容易引起內(nèi)存泄漏,因?yàn)檫@種方式?jīng)]有解決循環(huán)引用的問題,所以不建議使用!
以上就是我對js的內(nèi)存機(jī)制的理解,如有錯(cuò)誤請聯(lián)系我進(jìn)行更改?。。。。?/p>