node的小知識(shí)點(diǎn)

node內(nèi)存管理問題

在瀏覽器中,V8引擎實(shí)例的生命周期不會(huì)很長(zhǎng)(因?yàn)槲覀兪褂猛昃W(wǎng)站就會(huì)把網(wǎng)站關(guān)閉),而且運(yùn)行在用戶的機(jī)器上。如果不幸發(fā)生內(nèi)存泄露等問題,僅僅會(huì)影響到一個(gè)終端用戶。且無論這個(gè)V8實(shí)例占用了多少內(nèi)存,最終在關(guān)閉頁(yè)面時(shí)內(nèi)存都會(huì)被釋放,幾乎沒有太多管理的必要(當(dāng)然并不代表一些大型Web應(yīng)用不需要管理內(nèi)存)。但如果使用Node作為服務(wù)器,就需要關(guān)注內(nèi)存問題了,一旦內(nèi)存發(fā)生泄漏,久而久之整個(gè)服務(wù)將會(huì)癱瘓(服務(wù)器不會(huì)頻繁的重啟)。

漲知識(shí)之V8內(nèi)存限制

Node與其他語(yǔ)言不同的一個(gè)地方,就是其限制了JavaScript所能使用的內(nèi)存(64位為1.4GB,32位為0.7GB),這也就意味著將無法直接操作一些大內(nèi)存對(duì)象。這很令人匪夷所思,因?yàn)楹苌儆衅渌Z(yǔ)言會(huì)限制內(nèi)存的使用。

V8之所以限制了內(nèi)存的大小,表面上的原因是V8最初是作為瀏覽器的JavaScript引擎而設(shè)計(jì),不太可能遇到大量?jī)?nèi)存的場(chǎng)景,而深層次的原因則是由于V8的垃圾回收機(jī)制的限制。由于V8需要保證JavaScript應(yīng)用邏輯與垃圾回收器所看到的不一樣,V8在執(zhí)行垃圾回收時(shí)會(huì)阻塞JavaScript應(yīng)用邏輯,直到垃圾回收結(jié)束再重新執(zhí)行JavaScript應(yīng)用邏輯,這種行為被稱為“全停頓”(stop-the-world)。若V8的堆內(nèi)存為1.5GB,V8做一次小的垃圾回收需要50ms以上,做一次非增量式的垃圾回收甚至要1秒以上。這樣瀏覽器將在1s內(nèi)失去對(duì)用戶的響應(yīng),造成假死現(xiàn)象。如果有動(dòng)畫效果的話,動(dòng)畫的展現(xiàn)也將顯著受到影響。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容