2020-08-28-Node内存控制

2020-08-28  本文已影响0人  宇宙区长李小无

V8内存

V8内部的内存对象分为新生代和老生代,新生代是代表存在时间较短,很快被释放内存空间的对象,而老生代对象则是常驻在Node进程中,
只有进程结束才会被销毁。

一般来说V8对新老生代对象的内存分配是固定的,根据设备的64位(old: 1400MB,new: 4*16MB)或者32位(减半)分配对应的内存。
但是我们也可以在node进程启动的时候主动去分配。

node --max-old-space-size=1700 test.js // 单位为MB
node --max-new-space-size=1024 test.js // 单位为KB 

垃圾回收机制:

分代式垃圾回收

算法          scavenge        mark-sweep      mark-compact
---------------------------------------------------------
空间开销    双倍空间(无碎片)    少(有碎片)      少(无碎片)
速度          极快              中等              最慢
是否移动对象    是                否                是

内存溢出

通常来说内存溢出的原因有:

大文件操作

由于V8内部对内存大小有限制,所以在读取一些超大文件时,我们无法通过fs模块,而需要使用Stream流,它分为可读、可写流,
含有pipe方法,对文件流进行操作,不会受到内存的影响。

var reader = fs.createReadStream('a.txt');
var writer = fs.createWriteStream('b.txt');
reader.pipe(writer);
上一篇下一篇

猜你喜欢

热点阅读