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

时间:2018-04-15 10:51:40

标签: javascript ecmascript-6 null garbage-collection weakmap

我刚刚读到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可以重用之前在应用程序中占用的内存吗?我将不胜感激任何澄清。谢谢!

1 个答案:

答案 0 :(得分:3)

垃圾收集不会立即运行。如果你想让你的例子工作,你需要强制你的浏览器运行垃圾收集。

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

现在,您可以通过调用全局gc()方法来强制执行垃圾回收。

enter image description here