WeakMap和Map内存回收对比

WeakMap

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
WeakMap 的 key 是不可枚举的,它的引用是弱引用,在垃圾回收的时候会被回收掉。
基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。
下面是在node环境下的示例:


weakMap.png

Map.png
  • rss(resident set size):常驻集大小,是进程在主内存设备(即总分配内存的子集)中占用的空间量,包括所有 C++ 和 JavaScript 对象和代码。
  • heapTotal:V8 的内存使用量、"堆"的总大小,即占用的内存,包括3个部分,
  1. 已分配的内存,用于对象的创建和存储,对应于heapUsed
  2. 未分配的但可用于分配的内存
  3. 未分配的但不能分配的内存,例如在垃圾收集(GC)之前对象之间的内存碎片
  • heapUsed:V8 的内存使用量、已分配的内存,即堆中所有对象的总大小,是heapTotal的子集
  • external: 即绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用量。
  • arrayBuffers:是指为 ArrayBufferSharedArrayBuffer 分配的内存,包括所有 Node.js Buffer。 这也包含在 external 值中。 当 Node.js 被用作嵌入式库时,此值可能为 0,因为在这种情况下可能不会跟踪 ArrayBuffer 的分配。

参考

Map
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
WeakMap
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
http://www.ruanyifeng.com/blog/2017/04/memory-leak.html

你可能感兴趣的:(WeakMap和Map内存回收对比)