gpt4 book ai didi

javascript - 通过 Javascript WeakMaps 收集垃圾的缓存

转载 作者:可可西里 更新时间:2023-11-01 02:24:54 24 4
gpt4 key购买 nike

我想在 JavaScript 中缓存大对象。这些对象是通过键来检索的,缓存它们是有意义的。但它们不会一次全部放入内存,所以我希望在需要时对它们进行垃圾回收 - GC 显然知道得更多。

使用其他语言中的 WeakReferenceWeakValueDictionary 来创建这样的缓存是非常简单的,但是在 ES6 中我们有 WeakMap弱的地方。

那么,是否有可能制作类似 WeakReference 的东西或从 WeakMap 制作垃圾收集缓存?

最佳答案

在两种情况下,弱散列映射很有用(您的似乎适合第二种情况):

  1. 希望将信息附加到具有已知身份的对象;如果该对象不复存在,附加的信息将变得毫无意义,同样应该不复存在。 JavaScript 支持这种情况。

  2. 人们希望合并对语义相同对象的引用,以减少存储需求并加快比较。例如,将许多对相同大子树的引用替换为对同一子树的引用可以允许内存使用和执行时间减少一个数量级。不幸的是,JavaScript 不支持这种情况。

在这两种情况下,表中的引用只要有用就会一直保持事件状态,当它们变得无用时将“自然地”变得符合收集条件。不幸的是,WeakReference 的设计者并没有为上面定义的两种用法实现单独的类。做了它所以它可以有点用于任何一个,虽然不是非常好。

在键定义相等性以表示引用标识的情况下,WeakHashMap将满足第一个使用模式,但第二个将毫无意义(持有对与存储键语义相同的对象的引用的代码将持有对存储键的引用,并且不需要 WeakHashMap 给它一个).在键定义某种其他形式的相等性的情况下,表查询返回除了对存储对象的引用之外的任何内容通常没有意义,但避免存储引用保持键事件的唯一方法是使用WeakHashMap<TKey,WeakReference<TKey>>并让客户端检索弱引用,检索存储在其中的键引用,并检查它是否仍然有效(它可以在 WeakHashMap 返回 WeakReferenceWeakReference 本身被检查之间收集) .

关于javascript - 通过 Javascript WeakMaps 收集垃圾的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25567578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com