内存在服务端是一个寸土寸金的东西,在 Node.js v12 版本之前启动应用程序时,如果没有显式指定 --max-old-space-size
标志修改堆的最大内存值,将会采用 V8 的默认设置,64 位的机器上为 1400MB
,32 位机器上大约为 700MB
。一旦应用程序申请的堆空间大于该限制,应用程序会被终止并抛出 JavaScript heap out of memory
错误。
V8 关于堆大小的默认限制,之前是基于浏览器的用例,当内存占用过大每次的垃圾回收耗时也就越长。之前的这种默认限制在一些可配置内存大小的运行环境平台上,会导致程序的堆内存占用大小总是会突破平台的限制值,程序不会按预期的结果抛出堆内存溢出错误,例如在 Docker 容器环境下就有此问题。