javascript
JavaScript内存管理——优化内存占用
? ? ? ? 使用具備垃圾收集機(jī)制的語(yǔ)言編寫(xiě)程序,開(kāi)發(fā)人員一般不必操心內(nèi)存管理的問(wèn)題。但是,JavaScript在進(jìn)行內(nèi)存管理及垃圾收集時(shí)面臨的問(wèn)題還是有點(diǎn)與眾不同。其中最主要的一個(gè)問(wèn)題,就是分配給Web瀏覽器的可用內(nèi)存數(shù)量通常要比分配給桌面應(yīng)用程序的少。這樣做的目的主要是出于安全方面的考慮,目的是防止運(yùn)行JavaScript的網(wǎng)頁(yè)耗盡全部系統(tǒng)內(nèi)存而導(dǎo)致系統(tǒng)崩潰。內(nèi)存限制問(wèn)題不僅僅會(huì)影響給變量分配內(nèi)存,同時(shí)還會(huì)影響調(diào)用棧以及在一個(gè)線程中能夠同時(shí)執(zhí)行的語(yǔ)句數(shù)量。
? ? ? ? 因此,確保占用最少的內(nèi)存可以讓頁(yè)面獲得更好的性能。而優(yōu)化內(nèi)存占用的最佳方式,就是為執(zhí)行中的代碼值保存必要的數(shù)據(jù)。一旦數(shù)據(jù)不再有用,最好通過(guò)將其值設(shè)置為null來(lái)釋放其引用——這個(gè)做法叫做解除引用(dereferencing)。這一做法適用于大多數(shù)全局變量和全局對(duì)象的屬性。局部變量會(huì)在它們離開(kāi)執(zhí)行環(huán)境時(shí)自動(dòng)解除引用。如下面這個(gè)例子所示:
 
? ? ? ? 在這個(gè)例子中,變量globalPerson取得了createPerson()函數(shù)返回的值。在createPerson()函數(shù)內(nèi)部,我們創(chuàng)建了一個(gè)對(duì)象并將其賦給局部變量localPerson,然后又為該對(duì)象添加了一個(gè)名為globalPerson。由于localPerson在createPerson()函數(shù)執(zhí)行完畢后就離開(kāi)了其執(zhí)行環(huán)境,因此無(wú)需我們顯式地為它解除引用。但是對(duì)于全局變量globalPerson而言,則需要我們?cè)诓皇褂盟臅r(shí)候手工為它解除引用,這也正是上面例子中最后一行代碼的目的。
 ? ? ? ?不過(guò),解除一個(gè)值的引用并不意味著自動(dòng)回收該值所占用的內(nèi)存。解除引用的真正作用是讓值脫離執(zhí)行環(huán)境,以便垃圾收集器下次運(yùn)行時(shí)將其回收。
 
總結(jié)
以上是生活随笔為你收集整理的JavaScript内存管理——优化内存占用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: “军令申早发”上一句是什么
- 下一篇: 做人工受精多少钱啊?
