首页 > 解决方案 > 未收集 WeakMap 密钥

问题描述

const frame = {
    key: {}
};

const map = new WeakMap();
map.set(frame.key, 'value');
console.log(map); // { {} -> 'value' }

delete frame.key;
// Force GC
console.log(map); // { {} -> 'value' }

在这样的片段中,为什么key不收集?我以为一旦 I delete key,frame将停止持有它,它的引用计数将归零,因此要么触发 GC,要么至少由我手动触发的 GC 收集。

我通过转到about:memory并单击Free memory框中的所有按钮来强制在 Firefox 中进行 GC。

我假设地图要么是空的,要么至少在开发者工具中检查它时不会将密钥显示为实时参考。但这似乎不是正在发生的事情。

我可以确认开发人员工具中的视图没有过时,因为我可以向下钻取地图对象entries[0]并右键单击key选择存储为全局对象的值,当我评估时,我得到正常检查,没有错误,什么都没有.

标签: javascriptgarbage-collectionweak-references

解决方案


推荐阅读