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

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

最佳答案

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

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

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

enter image description here

关于将对象设置为 null 时的 JavaScript(ES6) WeakMap 垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49841096/

相关文章:

MySQL/InnoDB 插件 : Will NULL values for VARCHAR fields still take up storage spaces?

javascript - 使用 javascript 的弹出窗口 - 在旧的弹出窗口中打开新的弹出窗口

javascript - CSV 到多级/嵌套 JSON

node.js - React-Router 无法在组件内导入组件

javascript - 扩展语法对于对象数组不能按预期工作

javascript - 找到Asterisk并在表单标签中更改为红色[Meteor JS Way]

c# - 如何将char数组的值设置为null?

javascript - react 函数返回未定义

javascript - 使用 jquery 隐藏 div 但无法计算出针对正确 div 的逻辑

Python:如果为 Null 则为 0,否则为 1