如大家所熟悉的,在一般的后端开发语言中,在基本的内存使用上没有什么限制,然而在 Node 中通过JavaScript 使用内存时就会发现只能使用部分内存(64 位系统写约 1.4GB,32 位系统下约为 0.7GB)。
在这样的限制下,将会导致 Node 无法直接操作大内存对象,比如无法将一个 2GB 的文件读入内存中进行字符串分析处理,即使物理内存有 32GB,这样在单个 Node 进程的情况下,计算机的内存资源无法得到充分的使用。
造成这个问题的主要原因就在于 Node 基于 V8 构建,所以在 Node 中使用的JavaScript 对象基本上都是通过 V8 自己的方式来进行分配和管理的。V8 的这套内存管理机制在浏览器的应用场景下使用起来绰绰有余,足以胜任前端页面中的所有需求,但在 Node 中,这却限制了开发者随心所欲使用大内存的想法。
尽管在服务器端操作大内存也不是常见的需求场景,但有了限制之后,我们的行为就如同带着镣铐跳舞,如果在实际的应用中不小心触碰到这个界限,会造成进程退出。
要知晓 V8 如何限制了内存的用量,则需要回归到 V8 在内存使用上的策略,知晓其原理后,才能避免问题并更好的进行内存管理。