当前位置: 首页 > news >正文

WeakMap弱引用

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有保持引用)

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

http://www.lryc.cn/news/11518.html

相关文章:

  • Springboot 使用quartz 定时任务 增删改查
  • 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】
  • Linux常用命令汇总
  • 1.TCP、UDP区别、TCP/IP七层、四层模型、应用层协议(计网)
  • 气敏电阻的原理,结构,分类及应用场景总结
  • 实验10 拓扑排序与最短路径2022
  • C/C++每日一练(20230218)
  • 【C语言】预编译
  • 音频信号处理笔记(一)
  • 【深度学习】模型评估
  • AcWing《蓝桥杯集训·每日一题》—— 3777 砖块
  • CleanMyMac X软件下载及详细功能介绍
  • pytorch零基础实现语义分割项目(一)——数据概况及预处理
  • ARM+LINUX嵌入式学习路线
  • echart在微信小程序的使用
  • 51单片机最强模块化封装(5)
  • 链表学习之判断链表是否回文
  • 【Linux06-基础IO】4.5万字的基础IO讲解
  • c++协程库理解—ucontext组件实践
  • 英语基础-状语
  • 目标检测笔记(八):自适应缩放技术Letterbox完整代码和结果展示
  • 2023年全国最新高校辅导员精选真题及答案1
  • 【Python】Python读写Excel表格
  • Python每日一练(20230218)
  • 基于SSM框架的狼途汽车门店管理系统的设计与实现
  • 视频监控流程图3
  • Linux ARM平台开发系列讲解(CAN) 2.14.3 CANFD协议介绍
  • 参考 | 给C盘 “搬家“
  • 剑指 Offer 53 - II. 0~n-1中缺失的数字
  • 分布式id