【问题标题】:WeakMap doesn't work as expected in Chrome consoleWeakMap 在 Chrome 控制台中无法按预期工作
【发布时间】:2022-08-15 11:11:50
【问题描述】:

根据 MDN,WeakMap 对象

不会创建对其键的强引用,因此任何值 WeakMap 也成为垃圾回收的候选对象——只要 它们在其他地方没有被强烈提及。

但是当我在 Chrome 中尝试下面的代码时,WeakMap 无法按预期工作:

const wm = new WeakMap()
function foo(){
  const key = {bar: 1};
  const value = {bar: 2};
  wm.set(key, value)
}
foo()
console.log(wm)

为什么 WeakMap 中还有对象?

  • 垃圾回收不会在函数调用后立即执行,可能需要一些时间(甚至几分钟)才能清空 WeakMap。

标签: javascript


【解决方案1】:

只有在调用 GC(垃圾收集)时,weakmap 的内容才会改变。

在网页中测试weakmap时,页面必须有理由触发GC,以便weakmap执行其任务。

在调用 GC 之前,使用最少的元素(例如 github)访问一个相当静态的站点需要一段时间。

转到像 youtube 这样的页面并在视频的时间轴上跳转会更快地触发 GC,因为浏览器中会发生更多的内存管理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多