本篇文章帶大家探索一下Node中的堆內(nèi)存分配,深入了解一下Node.js中的內(nèi)存限制,希望對(duì)大家有所幫助!
在本篇文章中,我將探索一下Node中的堆內(nèi)存分配,然后試試看把內(nèi)存提高到硬件能承受的極限。然后我們將找到一些實(shí)用的方法來(lái)監(jiān)控 Node 的進(jìn)程以調(diào)試內(nèi)存相關(guān)問(wèn)題。
OK,準(zhǔn)備完成就發(fā)車(chē)!
大家可以在倉(cāng)庫(kù)拉一下相關(guān)代碼 clone the code from my GitHub:
https://github.com/beautifulcoder/node-memory-limitations
V8 垃圾回收簡(jiǎn)介
首先,簡(jiǎn)單介紹一下V8垃圾回收器。內(nèi)存的存儲(chǔ)分配方式是堆(heap),堆被分為幾個(gè)世代(generational)區(qū)域。 對(duì)象在它的生命周期中隨著年齡的變化,它所屬的世代也有所不同。
世代中分為年輕一代和老一代,而年輕的一代還分為了新生代和中間代。隨著對(duì)象在垃圾回收中幸存下來(lái),它們也會(huì)加入老一代。
世代假說(shuō)的基本原則是大多數(shù)對(duì)象都是年輕的。V8 垃圾回收器基于這一點(diǎn),只提升在垃圾回收中幸存下來(lái)的對(duì)象。隨著對(duì)象被復(fù)制到相鄰區(qū)域,它們最終會(huì)進(jìn)入老一代。
在Nodejs中內(nèi)存消耗主要分為三個(gè)方面:
- 代碼-代碼執(zhí)行時(shí)所在的位置
- 調(diào)用棧-用于存放具有原始類(lèi)型(數(shù)字,字符串或布爾值)的函數(shù)和局部變量
- 堆內(nèi)存
堆內(nèi)存是我們今天的主要關(guān)注點(diǎn)。 現(xiàn)在您對(duì)垃圾回收器有了