使用JavaScript進行前端開發時幾乎徹底不須要關心內存管理問題,對於前端編程來講,V8限制的內存幾乎不會出現用完的狀況,v8在node中有着內存的限制(64位1.4GB;32位0.7GB),因爲後端程序每每進行的操做更加複雜,而且長期運行在服務器不重啓,若是不關注內存管理,致使內存泄漏,node對內存泄露十分敏感,一旦線上應用有成千上萬的流量,哪怕是一個字節的內存泄露都會形成堆積,直到內存溢出。前端
咱們可使用process.memoryUsage() 能夠查看內存的使用狀況,有rss、heapTotal、heapUsed三個值,他們分別表明常駐內存、堆中總共申請內存、目前堆中使用的內存量。要注意,rss包括但不只限於堆內存,咱們知道在js中堆儲存者對象等..rss中還有棧、代碼運行內存、堆外內存。在node中對內存的分配和內存回收主要值得是堆內存,它把堆內存分區(新生代、老生代),新生代的對象爲存活時間較短的對象,老生代的對象爲存活時間較長或常駐內存的對象。而且對這兩種分區採用不一樣的算法進行垃圾回收,新生代空間較小,將它分爲from/to兩個部分,每次檢查會將from中的存活對象複製到to中,而後釋放剩下的對象資源,以後再轉換from和to的角色。當新生代中的對象屢次被複制則將其晉升到老生代,若to中內存使用超過25%也會將後續對象直接晉升。老生代中對象存活期較長,空間較大,採用這種算法不只浪費較多並且耗時長,在老生代中採用標記法實現垃圾清除。另外還有一種算法可整合不連續的空間(耗時較長)node