内存泄漏和垃圾回收机制

内存泄漏

  • 程序运行的时候需要内存,只要程序提出要求,操作系统就要给它分配内存,而随着持续的运行这些进程,必须及时释放不再用到的内存,否则轻则影响系统性能,重则导致进程崩溃。
  • 不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)。

垃圾回收机制

“引用技术” 如果一个值得引用次数是0 ,则表示这个值不再被用到,因此这块内存就可以释放。

WeakSet 和 WeakMap

它们对于值的引用都是不计入垃圾回收机制的,所以名字里面才会有一个”Weak”,表示这是弱引用
使用 node 命令证实:

$ node --expose-gc
--expose-gc  参数表示允许手动执行垃圾回收机制。
//  手动执行一次垃圾回收,保证获取的内存使用状态准确
Global.gc()
// 第一次调用以后,查看内存占用的初始状态,heapUsed 为 4M 左右
Process.memoryUsage(); 

{ rss: 21106688,
  heapTotal: 7376896,
  heapUsed: 4153936,
  external: 9059 }

// 创建 WeakMap引用

Let   wm  = new  WeakMap();

// 查看创建 WeakMap引用后的内存  heapUsed 为 4M 左右
Global.gc()
Process.memoryUsage(); 

{ rss: 20537344,
  heapTotal: 9474048,
  heapUsed: 3967272,
  external: 8993 }


wm.set(“a”,[fq,gherw,httew,ht]);


// 查看引用WeakMap后的内存    heapUsed 为 45M 左右
Global.gc()
Process.memoryUsage(); 
{ rss: 62652416,
  heapTotal: 51437568,
  heapUsed: 45911664,
  external: 8951 }


// 解除对象a的引用  
a = null;

// 再查看释放  a后的内存    heapUsed 为 4M 左右
Global.gc()
Process.memoryUsage(); 
{ rss: 20639744,
  heapTotal: 8425472,
  heapUsed: 3979792,
  external: 8956 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值