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有保持引用)
当我们对一个不再使用的对象保持引用的时候将会造成内存泄漏,如果你不再使用对象,需要删除它的任何变量引用。
WeakMap弱引用相关推荐
- vue中引用js_从JS中的内存管理说起 —— JS中的弱引用
点击上方"蓝字"关注本公众号 写在前面 在所有的编程语言中,我们声明一个变量时,需要系统为我们分配一块内存.当我们不再需要这个变量时,需要将内存进行回收(这个过程称之为垃圾回收). ...
- JavaScript的强引用和弱引用
目录 一.什么是强引用 二.弱引用 三.强引用和弱引用相比 一.什么是强引用 强引用是指向内存申请一段存储空间,进行存储的引用类型的对象的引用,在对象获得的分配内存空间中不仅仅存放了对象的信息,还存放 ...
- JavaScript中的弱引用和强引用
JavaScript中的弱引用和强引用 什么是弱引用和强引用 举例说明弱引用和强引用 在JavaScript中演示弱引用和强引用 弱引用的特性总结 什么是弱引用和强引用 JavaScript 中强引用 ...
- JavaScript中强引用和弱引用
在计算机程序设计中,有一个弱引用的概念: 一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收. 在JS中,WeakMap 和 WeakSet 给我们提供了弱引用 ...
- Android 弱引用 (WeakReference)的使用
1 弱引用 (WeakReference) 弱引用对象,这些对象不会阻止对其引用对象进行终结,终结和回收.弱引用最常用于实现规范化映射.假设垃圾收集器在某个时间点确定对象是弱可到达的.到那时,它将自动 ...
- java强引用弱引用_Java 的强引用、弱引用、软引用、虚引用
1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内存空间 ...
- JVM中强引用,弱引用,软引用和幽灵引用的代码
上代码: 1 public class ReferenceTest { 2 public static void main(String[] args) { 3 //test1();//软引用 4 / ...
- 阿里面试: 说说强引用、软引用、弱引用、虚引用吧
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 我们都知道 JVM 垃圾回收中,GC判断堆中的对象实例或数 ...
- ThreadLocal为什么要使用弱引用和内存泄露问题
在threadlocal的生命周期中,都存在这些引用. 看下图: 实线代表强引用,虚线代表弱引用. 下面来看两个问题: 1为什么要使用弱引用 2为什么会出现内存泄露问题 - 为什么要使用弱引用 - 每 ...
最新文章
- rowid会变化么_升级后的饿了么,将成为阿里引领数字化的先锋
- HDU-4777 Rabbit Kingdomom(树状数组、区间离线)
- 【渝粤教育】国家开放大学2019年春季 2712园艺基础 参考试题
- Flowable工作流总结_工作规范流程设计思路
- mac docker 共享_如何在Docker for Mac中加快共享文件访问
- sparkpython效率低_Effective PySpark(PySpark 常见问题)
- 别再问“自媒体怎么做”
- alfred 4 (mac提升效率工具)
- 如何使用记事本编译并运行Java源代码
- J2EE框架技术(SpringMVC) 知识点笔记(2)
- Creator H5全平台游戏开发教程 PDF 下载(800+页)
- 嵌入式软件分层及目录结构设计规范
- linux系统中权限有几种,Linux系统中三种基本权限
- uCOS事件相关函数代码理解
- ubuntu 使用 egl
- New Phy: 中科院城环所朱永官等综述全球变化对叶际微生物组的影响
- 什么叫SOC-新能源充电桩
- 英文学习20180621
- java park unpark_LockSupport(park/unpark)源码分析
- PS怎么修改数字如 2011变为2013
热门文章
- 谢希仁《计算机网络》笔记
- 360以不正当竞争为由起诉卡巴斯基
- 音频焦点 (audio focus)(二)
- R语言中rattle安装,GTK+反复不成功的问题
- n76e003at20 c语言,N76E003AT20单片机串口0调试
- 八百客CRM支招“快播”如何防范风险
- 计算机论文视频app,毕业设计论文-爱尚短视频社区APP的设计与实现.doc
- oracle驼峰命,驼峰鼻人命运如何 坎坷吗
- kubernetes:[kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz‘ failed
- Linux(11)——LVM实验