zoukankan      html  css  js  c++  java
  • Map和WeakMap的区别

    个人总结:
    map对key强引用,当map引用了一个key的时候,(内存堆空间的)实际key内容不会被垃圾回收掉。 (有内存泄漏风险)
    weakmap对key弱引用,实际的key可能在某次垃圾回收操作时被清除掉,导致weakmap中的这对key-value也会消失掉。



    引用计数:https://zh.wikipedia.org/wiki/%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0
    只要存在计数,就不会被垃圾回收机制回收。

    强引用:引用并计数
    只要引用存在,垃圾回收器永远不会回收。
    弱引用:只引用 不计数
    会垃圾回收机制回收。

    强引用与弱引用本质是两种不同的指针

    在Chrome中跑下面代码:

    var map = new Map();

    {

    let x = {}

    map.set(x, 'something');

    }

    console.log(map);
     

    map是在{}这样的一个scope中定义的,scope结束后x应该被垃圾回收掉,但是map强引用了x ,所以x不会被辣鸡回收机制回收,所以这里是可以打印出map的。

    var map = new WeakMap();

    {

    let x = {}

    map.set(x, 'something');

    }

    console.log(map);
     

    WeakMap对x属于弱引用,只有引用,没有计数,当经过{}语句块时垃圾回收判断没有计数了,于是删除掉了x,所以这里打印出的map中长度是0。

    
    
    

     以上只在Chrome浏览器控制台第一次运行有效 因为垃圾回收会受有自定的引擎优化算法影响 在Edge下试了几次都保证有效 ( Microsoft Edge 42.17134.1.0 )

  • 相关阅读:
    python pandas groupby
    ORC 资料Mark
    python split() 用法
    Hive 中的变量
    特征选择方法
    Introduction to SIFT (Scale-Invariant Feature Transform)
    SIFT 、Hog 、LBP 了解
    python None 和 NaN
    判断特征中是否含有空值、空值填充
    vue 子组件引用
  • 原文地址:https://www.cnblogs.com/eret9616/p/9134548.html
Copyright © 2011-2022 走看看