es6 --- > 使用node的memoryUsage检测WeakMap()

打开node命令行

$ node --expose-gc

// --expose-gc:表示允许手动执行垃圾回收机制

// 手动执行一次垃圾回收,保证获取的内存使用状态准确
> global.gc();

在这里插入图片描述

// 查看内存占用的初始状态,
> process.memoryUsage();

es6 --- > 使用node的memoryUsage检测WeakMap()_第1张图片
可以发现初始用了4.7MB左右

// 创建一个WeakMap()实例wm
> let wm = new WeakMap();

// 创建一个变量key,指向一个5*1024*1024的数组
> let key = new Array(5 * 1024*1024);

// 将key数组set进实例wm中
> wm.set(key,1);

es6 --- > 使用node的memoryUsage检测WeakMap()_第2张图片

// 手动执行一次垃圾回收,并查看此时的内存占用情况
> global.gc();
> process.memoryUsage();

es6 --- > 使用node的memoryUsage检测WeakMap()_第3张图片
此时内存占用用到了47MB左右.

// 清除对key数组的引用,注意:没有清除实例wm对key的引用
> key = null;

// 再次手动执行垃圾回收机制一次,并查看内存状态
> global.gc()
> process.memoryUsage()

es6 --- > 使用node的memoryUsage检测WeakMap()_第4张图片
可以看到此时的内存占用是5.1MB左右…
说明WeakMap类对键名的引用是弱引用…即:垃圾回收机制不将该引用考虑在内

参考《ES6标准入门》(第3版) P226、P228~P229

你可能感兴趣的:(es6)