Node中内存溢出的解决办法

本文详细探讨了Node.js中遇到内存溢出的问题,分析了V8的内存结构,包括查看堆内存使用和内存限制的设置。讨论了V8的垃圾回收机制,如Scavenge和Mark-Sweep & Mark-Compact算法,并介绍了如何主动释放内存。此外,还讲解了在使用pm2管理进程时如何解决内存溢出,强调了避免内存泄漏的重要性。
摘要由CSDN通过智能技术生成

前一段开发的时候遇到个问题,说out of memory。这是一个很明显却不常见的问题,一般情况下还不好遇到,遇到了也很好解决。趁着遇到这个问题,自己也翻了翻了关于node的内存管理,在这里做个总结以及遇到这种问题应该如何解决。

先说一下node的一些背景,大家都知道node和v8是分不开的。v8作为node的JavaScript的脚本引擎,node在享受v8的优点时,也会受到v8的限制,尤其是内存限制。在一般的后端语言中好像基本对内存没有什么限制,但是在node中使用内存时就会发现内存好像只使用了一部分,并没有全部使用。恭喜你,如果你感觉到只是用一部分的时候,你需要小心使用你的内存了。在64位系统中内存约1.4G,32位中是0.7G,不要问我为什么是这么大,因为我是查资料查到的,跟v8的源码有关系,知道的老哥可以留言告诉我。

下面内容分五部分:v8的内存介绍、v8的垃圾回收机制、如何主动释放对象、使用pm2管理node进程时如何解决内存溢出和其他。

一、v8的内存介绍

很早看到说JavaScript的所有对象都是通过堆来分配的,这句话说对也对说不对也不对。如果你认为万物皆对象那么这句话就错了,但是其实是“万物皆对象”这句话错了。简单说一下就是用typeof()函数看一下,如果是object那么就是引用类型也叫对象类型,不是object和undefined就是基本类型。对象类型是存在堆里的,基本类型是存在栈里的。

举个例子,看下面的变量存储情况。

const a = 1; //栈
const b = 'hello'; //栈
const c = [1]; // c 存栈,[1]存堆
const d = {
    name: 'zhengsy' }; // d 存栈,{ name: 'zhengsy' }存堆
a = 2; // 报错
c.push
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值