为何以下代码只会占满机器的内存,但不会溢出,那当内存满了之后,新的new出来的Buffer放在哪里呢?
let arr = []; while(true) arr.push(new Buffer(1000));
Buffer是不占v8内存的。新new的buffer应该是放在了虚拟内存里。
来自酷炫的 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.
看是不是这个原因
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
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.看是不是这个原因