javascript - 未收集 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
选择存储为全局对象的值,当我评估它时,我得到正常检查,没有错误,什么都没有.
解决方案
推荐阅读
- performance - 我应该将 JMeter 与 Selenium 和 junit 一起用于 Web 应用程序的负载和性能测试吗?
- html - 如何使用 html 显示电子邮件的嵌入图像?
- django - Django:查询相互关联的模态......如何最好地实现预取或选择相关?
- authentication - Zabbix web场景zul登录表单
- scala - 如何发送 MultipartForm 请求
- sql - 在 SQL (Impala) 中,如何计算满足条件的行与下一个行之间的时间增量?
- .net - app.box .NET SDK 返回空的项目集合
- node.js - 错误接收器-[onTurnError]:TypeError:无法读取未定义的属性“getTeamDetails”
- c# - 从 C# 中杀死一个远程 linux 进程
- selenium - 线程“主”org.openqa.selenium.NoAlertPresentException 中的异常:尝试使用 Selenium 和 Java 解除警报时没有此类警报