Open Chenjiayuan195 opened 4 years ago
WeakSet只能存放对象类型,是对对象的弱引用,一旦引用的对象不再被引用,就会被GC WeakMap是对key值的弱引用,必须用对象做key值。一旦引用的对象不再被引用,就会被GC 以下通过node环境实际看看它们的作用
> node --expose-gc //手动执行GC操作 > global.gc() 先清除一下 > process.memoryUsage() //查看当前的内存占用 { rss: 21467136, heapTotal: 7114752, heapUsed: 4193848, external: 8702 } > let wm = new WeakMap() > let key = new Array(5 * 1024 * 1024); > wm.set(key,1) > process.memoryUsage() // 可以看到内存占用达到46M { rss: 63913984, heapTotal: 50642944, heapUsed: 46574088, external: 8704 } > global.gc() undefined > process.memoryUsage() //内存不会清除 { rss: 64135168, heapTotal: 50642944, heapUsed: 46540384, external: 8687 } > key = null //此时将key值置为null > global.gc() undefined > process.memoryUsage() //内存占用被释放 { rss: 21901312, heapTotal: 8687616, heapUsed: 4594528, external: 8687 } WeakSet同理
WeakSet只能存放对象类型,是对对象的弱引用,一旦引用的对象不再被引用,就会被GC WeakMap是对key值的弱引用,必须用对象做key值。一旦引用的对象不再被引用,就会被GC 以下通过node环境实际看看它们的作用