Chenjiayuan195 / Summary-of-front-end-knowledge-points

1 stars 0 forks source link

WeakMap和WeakSet的作用 #21

Open Chenjiayuan195 opened 4 years ago

Chenjiayuan195 commented 4 years ago

WeakSet只能存放对象类型,是对对象的弱引用,一旦引用的对象不再被引用,就会被GC WeakMap是对key值的弱引用,必须用对象做key值。一旦引用的对象不再被引用,就会被GC 以下通过node环境实际看看它们的作用

 > node --expose-gc //手动执行GC操作
 > global.gc() 先清除一下
 > process.memoryUsage() //查看当前的内存占用
{ rss: 21467136,
  heapTotal: 7114752,
  heapUsed: 4193848,
  external: 8702 }
> let wm = new WeakMap()
> let key = new Array(5 * 1024 * 1024);
> wm.set(key,1)
> process.memoryUsage() // 可以看到内存占用达到46M
{ rss: 63913984,
  heapTotal: 50642944,
  heapUsed: 46574088,
  external: 8704 }
> global.gc()
undefined
> process.memoryUsage() //内存不会清除
{ rss: 64135168,
  heapTotal: 50642944,
  heapUsed: 46540384,
  external: 8687 }
> key = null //此时将key值置为null
> global.gc()
undefined
> process.memoryUsage() //内存占用被释放
{ rss: 21901312,
  heapTotal: 8687616,
  heapUsed: 4594528,
  external: 8687 }

WeakSet同理