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
?我以为一旦我delete
key
,frame
将停止保留它,并且其引用计数将变为零,因此触发GC或至少由我手动触发的GC收集。 / p>
我已通过进入about:memory
并单击可用内存框中的所有按钮来强制在Firefox中使用GC。
我认为地图要么为空,要么至少在开发人员工具中对其进行检查时不会显示该密钥作为实时参考。但这不是正在发生的事情。
我可以确认开发人员工具中的视图没有过时,因为我可以通过entries[0]
向下钻取地图对象,然后右键单击key
的值,选择存储为全局对象对象,当我评估 时,我得到了正常检查,没有错误,没事。