为何以下代码只会占满机器的内存,但不会溢出
发布于 7 年前 作者 wangchaoduo 3978 次浏览 来自 问答

为何以下代码只会占满机器的内存,但不会溢出,那当内存满了之后,新的new出来的Buffer放在哪里呢?

let arr = [];
while(true)
  arr.push(new Buffer(1000));
4 回复

Buffer是不占v8内存的。新new的buffer应该是放在了虚拟内存里。

来自酷炫的 CNodeMD

堆和栈了解一下

来自酷炫的 CNodeMD

个人理解: 每次分配的内存都是虚拟内存,64位系统,虚拟内存最大为2^64-1,所以申请内存理论上是可以超过物理内存大小的。 由于你的代码只申请不使用,所以操作系统是不会分配物理内存给你的。只在你使用该段内存的时候操作系统才会分配物理内存给你。

官网API

Prior to Node.js 8.0.0, the memory allocated for such Buffer instances is not initialized and can contain sensitive data.

看是不是这个原因

回到顶部