WeakMap 介绍

WeakMap对象是一组键/值对的集合,其中的键是弱引用的。

WeakMap 的 key 只能是 Object 类型。

原始数据类型是不能作为 key 的(比如 Symbol)。

WeakMap只有四个方法可用:get()、set()、has()、delete()。

**

具体属性和方法介绍,可查看 《MDN WeakMap》。

3.2 WeakMap 应用

原文中介绍了“通过 WeakMap 缓存计算结果”和“在 WeakMap 中保留私有数据”两种应用场景。

另外还有一种比较常见的场景:以 DOM节点作为键名的场景。

场景1:当我们想要为DOM添加数据时,可使用WeakMap。

场景2:当我们想要为DOM元素添加事件监听时,可使用WeakMap。

使用--expose-gc 开启手动gc

结果表明,weakMap在key对象被回收时,会自动将对应的映射也回收掉

并且weakmap对于对象的引用不计入引用计数器

代码

分别调用两次测试函数,保证结果与调用顺序无关

const objNum = 64 * 1024;

function usageSize() {

const used = process.memoryUsage().heapUsed;

return Math.round((used / 1024 / 1024) * 100) / 100 + "M";

}

function testMap() {

const curType = " Map "

global.gc();

console.log(1, curType + '占用内存:' + usageSize());

const map = new Map();

let arr = Array(objNum).fill().map((_, index) => Object.create({index}))

map.set(arr, 1)

global.gc();

console.log(2, curType + '占用内存:' + usageSize());

arr = null;

global.gc();

console.log(3, curType + '占用内存:' + usageSize());

console.log("=====")

}

function testWeakMap() {

const curType = " WeakMap "

global.gc();

console.log(1, curType + '占用内存:' + usageSize());

let arr = Array(objNum).fill().map((_, index) => ({index}))

const map = new WeakMap();

map.set(arr, 1)

global.gc();

console.log(2, curType + '占用内存:' + usageSize());

arr = null;

global.gc();

console.log(3, curType + '占用内存:' + usageSize());

console.log("=====")

}

testMap()

testWeakMap()

testWeakMap()

testMap()

java map 需要回收吗_weakMap 和 map 的垃圾回收对比相关推荐

  1. java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)

    java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...

  2. java垃圾回收 分代_Java分代垃圾回收策略原理详解

    一.为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对 ...

  3. java垃圾回收 分代_Java-垃圾回收机制-通用的分代垃圾回收机制

    分代垃圾回收机制是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的回收算法,以便提高回收效率.Java虚拟机将对象分为三种状态:年轻代.年老代.持久代.JVM将 ...

  4. jvm学习第十、十一天、十二天—垃圾回收器1、垃圾回收的相关概述2、 垃圾回收相关算法3、 垃圾回收器

    标题:jvm学习第十.十一天.十二天-垃圾回收器 学习内容: 1.垃圾回收的相关概述 2. 垃圾回收相关算法 3. 垃圾回收器 内容详情: 1.垃圾回收的相关概述 什么是垃圾( Garbage)? 垃 ...

  5. 解读.net垃圾回收和CLR 4.0对垃圾回收所做的改进之一-.Net编程教程

    解读.net垃圾回收和CLR 4.0对垃圾回收所做的改进之一-.Net编程教程 来源:模板无忧 作者:编辑整理更新时间:2009-07-19点击:114 A survey of garbage col ...

  6. python内存的回收机制_Python 内存管理以及垃圾回收机制

    内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...

  7. Java面向对象(七)包、内部类、垃圾回收机制

    一.包 package 包名:  ---- 声明包    注意: 一个java文件中只能有一句package语句 ,  并且必须放在java文件首行 . import 包名: --- 导包 impor ...

  8. java 2分代复制垃圾回收_Java对象的后事处理——垃圾回收(二)

    1 先谈Finalize() finalize()能做的所有工作,使用try-finally或者其他方式都可以做得更好.更及时,所以笔者建议大家完全可以忘掉Java语言中有这个方法的存在. --< ...

  9. java gc回收算法_Java基础之GC垃圾回收的历史

    [TOC] 垃圾回收思路: - 发现无用信息对象 - 回收被无用对象占用的内存空间,使该空间可被程序再次使用. > 关键词联想:(**类型**)堆和非堆,(**人类成长**)伊甸园-幸存者乐园- ...

最新文章

  1. 序列化和反序列化的概念与延伸【详细解释 + 样例演示】
  2. 如何创建MFC模式对话框与非模式对话框
  3. 8086汇编寄存器及指令汇总
  4. 内核中_init,_exit中的作用
  5. [Redis6]Redis相关知识介绍
  6. Centos7 Docker 安装与启动_入门试炼01
  7. 参考TinyOS官方网站实现BlinkToRadio
  8. ubuntu 16.04 修改光标/鼠标大小
  9. 启动、关闭、刷新 WINDOWS服务
  10. 专注创新勇突破 宏杉科技七策定纲存储之道
  11. 【智慧城市】智能照明系统解决方案
  12. IDM统一认证功能说明
  13. 村长网推出用韩国论山特产草莓特制的低糖“村长草莓酱”
  14. Python常用英文单词
  15. 分门别类刷leetcode——链表
  16. 华为运营商级路由器配置示例 | 配置BGP VPLS和LDP VPLS interworking示例
  17. 使用Cesium创建3dtiles管线(视频)
  18. 2022最新影视小程序源码支持josn官解 卡密系统
  19. 权限管理系统(包括审批流程)数据库设计图
  20. 重温与解析《最后生还者》的互动叙事精髓(下)

热门文章

  1. MBA中国网关注:打造最佳团队的5大秘诀
  2. 2020-08-31
  3. 太让人失望了,这些公司建议避雷!
  4. python抓取酷我MV
  5. stm32笔记02——ST-Link下载器使用说明
  6. python中string模块各属性以及函数的用法
  7. 大数据是不是互联网思维?
  8. 计算机毕业设计Java-ssm爱心扶贫超市管理系统源码+系统+数据库+lw文档
  9. 【linux命令】文件管理(上)
  10. AutoJs封号大集合---火热更新中