天天看點

node: JavaScript head out of memory 記憶體不足導緻項目運作不起來

vue前端編譯打包的時候或者是node背景運作的時候,node報錯堆溢出

node: JavaScript head out of memory 記憶體不足導緻項目運作不起來

問題:

這是因為node是基于V8引擎,在64系統下,其所能支配的記憶體空間大概1.4G,32位系統下所支配的記憶體約0.7G。

是以項目大的話,有可能會出現記憶體不夠。

在V8中,所有的JavaScript對象都是通過堆來進行配置設定的。Node提供了V8中記憶體使用量的查 看方式

process.memoryUsage();

詳情

{ rss: 31272960,
  //V8的堆記憶體使用情況,已申請到的堆記憶體
 heapTotal: 9682944,
  //V8的堆記憶體使用情況,目前使用的量
 heapUsed: 5400792,
  //V8 引擎内部的 C++ 對象占用的記憶體
 external: 16905 }           

解決辦法:

Vue前端&node後端:在package.json中的script腳本中手動調整記憶體大小

node: JavaScript head out of memory 記憶體不足導緻項目運作不起來

另外也可以在ide的終端指令或者說是cmd中設定 set node_options=--max_old_space_size=4096機關都是(MB)

v8的垃圾回收機制

V8的垃圾回收政策主要基于分代式垃圾回收機制

在V8中,主要将記憶體分為新生代和老生代兩代。

新生代中的對象為存活時間較短的對象新生代中的對象主要通過Scavenge算法進行垃圾回收

老生代中的對象為存活時間較長或常駐記憶體的對象Mark-Sweep和Mark-Compact相結合的方式進行垃圾回收

可以自己寫一個方法來增加記憶體直到溢出,然後列印出來檢視記憶體使用情況;

Windows大概經常會有這種溢出的情況,但是Mac電腦沒有。可能這就是系統差别吧。