let obj={name:'张三'}
//{name:'张三'}这个对象能够被读取到,因为obj这个变量名对它的引用
​
//将引用覆盖掉
obj=null
//这个对象将会被从内存中移除,因为我们已经失去了对他的所有引用
let obj={name:'张三'}
let arr=[obj]
​
obj=null
//对象{name:'张三'}不会被从内存中移除,因为数组arr保存了对它的引用

强引用和弱引用之间的区别

  • js中绝大多数变量都保存着对一个对象的强引用,比如上面数组保存着对对象{name:'张三}的强引用

  • 如果一个变量保存着对一个对象的强引用,那么这个对象将不会被垃圾回收,但是如果一个变量只保存者对这个对象的弱引用,那么这个对象将会被垃圾回收

  • 一个变量类型在对象上有一个弱引用,就是Weakmap的情况

Map和Weakmap的比较

  • 使用Map,对象会占用内存,可能不会被垃圾回收,Map对对象是强引用

    let obj={name:'张三'}
    let mapObj=new Map()
    mapObj.set(obj,'any value')
    obj=null
    mapOnj.size()//1
  • Weakmap则完全不同,她不会阻止关键对象的垃圾回收

  • Weakmap只接受object作为key,他只保存对对象的弱引用

    let obj={name:'张三'}
    let weakmapObj=new WeakMap()
    weakmapObj.set(obj,'any value')
    obj=null
    weakmapObj.size()//0
  • 对象被垃圾回收器删除,因为weakmap对象{name:'张三'}上只有弱引用,二这个对象已经没有强引用了(只有变量obj有保持引用)

  • 当我们对一个不再使用的对象保持引用的时候将会造成内存泄漏,如果你不再使用对象,需要删除它的任何变量引用。

WeakMap弱引用相关推荐

  1. vue中引用js_从JS中的内存管理说起 —— JS中的弱引用

    点击上方"蓝字"关注本公众号 写在前面 在所有的编程语言中,我们声明一个变量时,需要系统为我们分配一块内存.当我们不再需要这个变量时,需要将内存进行回收(这个过程称之为垃圾回收). ...

  2. JavaScript的强引用和弱引用

    目录 一.什么是强引用 二.弱引用 三.强引用和弱引用相比 一.什么是强引用 强引用是指向内存申请一段存储空间,进行存储的引用类型的对象的引用,在对象获得的分配内存空间中不仅仅存放了对象的信息,还存放 ...

  3. JavaScript中的弱引用和强引用

    JavaScript中的弱引用和强引用 什么是弱引用和强引用 举例说明弱引用和强引用 在JavaScript中演示弱引用和强引用 弱引用的特性总结 什么是弱引用和强引用 JavaScript 中强引用 ...

  4. JavaScript中强引用和弱引用

    在计算机程序设计中,有一个弱引用的概念: 一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收. 在JS中,WeakMap 和 WeakSet 给我们提供了弱引用 ...

  5. Android 弱引用 (WeakReference)的使用

    1 弱引用 (WeakReference) 弱引用对象,这些对象不会阻止对其引用对象进行终结,终结和回收.弱引用最常用于实现规范化映射.假设垃圾收集器在某个时间点确定对象是弱可到达的.到那时,它将自动 ...

  6. java强引用弱引用_Java 的强引用、弱引用、软引用、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内存空间 ...

  7. JVM中强引用,弱引用,软引用和幽灵引用的代码

    上代码: 1 public class ReferenceTest { 2 public static void main(String[] args) { 3 //test1();//软引用 4 / ...

  8. 阿里面试: 说说强引用、软引用、弱引用、虚引用吧

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 我们都知道 JVM 垃圾回收中,GC判断堆中的对象实例或数 ...

  9. ThreadLocal为什么要使用弱引用和内存泄露问题

    在threadlocal的生命周期中,都存在这些引用. 看下图: 实线代表强引用,虚线代表弱引用. 下面来看两个问题: 1为什么要使用弱引用 2为什么会出现内存泄露问题 - 为什么要使用弱引用 - 每 ...

最新文章

  1. rowid会变化么_升级后的饿了么,将成为阿里引领数字化的先锋
  2. HDU-4777 Rabbit Kingdomom(树状数组、区间离线)
  3. 【渝粤教育】国家开放大学2019年春季 2712园艺基础 参考试题
  4. Flowable工作流总结_工作规范流程设计思路
  5. mac docker 共享_如何在Docker for Mac中加快共享文件访问
  6. sparkpython效率低_Effective PySpark(PySpark 常见问题)
  7. 别再问“自媒体怎么做”
  8. alfred 4 (mac提升效率工具)
  9. 如何使用记事本编译并运行Java源代码
  10. J2EE框架技术(SpringMVC) 知识点笔记(2)
  11. Creator H5全平台游戏开发教程 PDF 下载(800+页)
  12. 嵌入式软件分层及目录结构设计规范
  13. linux系统中权限有几种,Linux系统中三种基本权限
  14. uCOS事件相关函数代码理解
  15. ubuntu 使用 egl
  16. New Phy: 中科院城环所朱永官等综述全球变化对叶际微生物组的影响
  17. 什么叫SOC-新能源充电桩
  18. 英文学习20180621
  19. java park unpark_LockSupport(park/unpark)源码分析
  20. PS怎么修改数字如 2011变为2013

热门文章

  1. 谢希仁《计算机网络》笔记
  2. 360以不正当竞争为由起诉卡巴斯基
  3. 音频焦点 (audio focus)(二)
  4. R语言中rattle安装,GTK+反复不成功的问题
  5. n76e003at20 c语言,N76E003AT20单片机串口0调试
  6. 八百客CRM支招“快播”如何防范风险
  7. 计算机论文视频app,毕业设计论文-爱尚短视频社区APP的设计与实现.doc
  8. oracle驼峰命,驼峰鼻人命运如何 坎坷吗
  9. kubernetes:[kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz‘ failed
  10. Linux(11)——LVM实验