Skip to content

Latest commit

 

History

History
43 lines (26 loc) · 1.3 KB

File metadata and controls

43 lines (26 loc) · 1.3 KB

WeakMap意义

在实际业务场景中 WeakMap的使用场景并不多,他更多是在我们阅读框架当中的时候会碰到。

WeakMap从名称上来看 Weak-弱 有弱就会有强

1.强引用和弱引用的区别 直接使用代码更加直观

  • 强引用
  let key=new Object({});

  key=null; //当我们设置成null的时候引用就会被GC回收

但是还是会有这种情况下

 let key=new Array(['1']);

 let map=new Map();
 map.set(key,1);
 key=null;  这种情况下GC不会回收代码,因为虽然key释放了引用,但是map还是对key有着强引用
 所以key引用的Array对象不会被释放掉,就会造成内存泄漏

  • 弱引用
 上述的代码中

 let key=new Array(['1']);

 let map=new WeakMap();
 map.set(key,1);
 key=null;  这种情况下如果使用WeakMap就会解决掉上述的问题,GC会认为他已经是可以回收的


总结这个弱引用的特性,就是 WeakMaps 保持了对键名所引用的对象的弱引用,即垃圾回收机制不将该引用考虑在内。只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。