JavaScript(ES6) 将对象设置为 null 时 WeakMap 垃圾回收

2024-02-01

我刚刚读到 WeakMaps 通过专门使用对象作为键来利用垃圾收集,并且将对象分配给 null 相当于删除它:

let planet1 = {name: 'Coruscant', city: 'Galactic City'};
let planet2 = {name: 'Tatooine', city: 'Mos Eisley'};
let planet3 = {name: 'Kashyyyk', city: 'Rwookrrorro'};

const lore = new WeakMap();
lore.set(planet1, true);
lore.set(planet2, true);
lore.set(planet3, true);
console.log(lore); // output: WeakMap {{…} => true, {…} => true, {…} => true}

然后我将对象设置为 null:

planet1 = null;
console.log(lore); // output: WeakMap {{…} => true, {…} => true, {…} => true}

为什么输出是一样的?不是应该将其删除,以便 gc 可以重用应用程序中先前占用的内存吗?如果有任何澄清,我将不胜感激。谢谢!


垃圾收集不会立即运行。如果您希望示例正常工作,您需要强制浏览器运行垃圾收集。

使用以下标志运行 chrome:google-chrome --js-flags="--expose-gc".

您现在可以通过调用全局强制垃圾回收gc() method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript(ES6) 将对象设置为 null 时 WeakMap 垃圾回收 的相关文章

随机推荐