1871070
V8的内存限制
- V8把内存分为「新生代(New Space)」和 「老生代 (Old Space)」。新生代中的对象为存活时间较短的对象,老生代中的对象为存活时间较长或常驻内存的对象;--max_old_space_size改变的是老生代的内存大小,单位为M;--max_new_space_size改变的是新生代的内存大小,单位为K;
- 《深入浅出nodejs》书中“内存控制章节”说明,64位系统约为1.4GB,32位系统约为0.7GB;
- 书中说明,Buffer是基于c++,其内存是Node的C++层面提供的,不受V8内存限制;
- 我的测试结果:Buffer的内存不能大于2G,否则会内存泄漏,Array不能大于4G,这点我不太明白;为什么Buffer会有内存限制呢?而Array的限制却为4G,不应该是1.4G么?测试代码如下:
// 2G,会报错:RangeError: Invalid typed array length
new Buffer(2*1024*1024*1024)
// 2G-1,正常,不会报错
new Buffer(2*1024*1024*1024 - 1)
// 4G,会报错:RangeError: Invalid typed array length
new Array(4*1024*1024*1024)
// 4G-1,正常,不会报错
new Array(4*1024*1024*1024-1)