V8的内存限制

V8的内存限制V8的内存限制

点击蓝字

关注这个多彩的世界

V8的内存限制V8的内存限制V8的内存限制V8的内存限制V8的内存限制V8的内存限制

我们在学习JavaScript编程时听说过,它与Java一样,由垃圾回收机制来进行自动内存管理,这使得开发者不需要像C/C++程序员那样在编写代码的过程中时刻关注内存的分配和释放问题。但在浏览器中进行开发时,几乎很少有人能遇到垃圾回收对应用程序构成性能影响的情况。Node极大地拓宽了JavaScript的应用场景,当主流应用场景从客户端延伸到服务器端之后,我们就能发现,对于性能敏感的服务器端程序,内存管理的好坏、垃圾回收状况是否优良,都会对服务构成影响。而在Node中,这一切都与Node的JavaScript执行引擎V8息息相关。


在一般的后端开发语言中,在基本的内存使用上没有什么限制,然而在Node中通过JavaScript使用内存时就会发现只能使用部分内存(64位系统下约为1.4 GB,32位系统下约为0.7 GB)。在这样的限制下,将会导致Node无法直接操作大内存对象,比如无法将一个2 GB的文件读入内存中进行字符串分析处理,即使物理内存有32 GB。这样在单个Node进程的情况下,计算机的内存资源无法得到充足的使用。


造成这个问题的主要原因在于Node基于V8构建,所以在Node中使用的JavaScript对象基本上都是通过V8自己的方式来进行分配和管理的。V8的这套内存管理机制在浏览器的应用场景下使用起来绰绰有余,足以胜任前端页面中的所有需求。但在Node中,这却限制了开发者随心所欲使用大内存的想法。


尽管在服务器端操作大内存也不是常见的需求场景,但有了限制之后,我们的行为就如同带着镣铐跳舞,如果在实际的应用中不小心触碰到这个界限,会造成进程退出。要知晓V8为何限制了内存的用量,则需要回归到V8在内存使用上的策略。知晓其原理后,才能避免问题并更好地进行内存管理。


V8的内存限制