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:是指为
ArrayBuffer
和SharedArrayBuffer
分配的内存,包括所有 Node.jsBuffer
。 这也包含在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
网友评论