我有一个记忆的 fn,其中 fn 由两个输入引用记忆:
let NewRefCursor = memoized(
(deref, swap) => refToHash(deref) + refToHash(swap), // memoizer identity fn
(deref, swap) => new RefCursor(deref, swap)); // the function we are memoizing
我需要的行为是NewRefCursor(a, b) === NewRefCursor(a, b)
. 当a
或b
被垃圾回收时,游标也应该被垃圾回收。
refToHash
是另一个使用ES6WeakMap
的记忆函数,因此仍然允许看到的引用被 GC。
NewRefCursor
记忆起来要棘手得多,因为它使用两个参数来确定缓存命中,因此与 不兼容WeakMap
,因此将阻止看到的任何引用被 GC'ed。我对任何形式的诡计持开放态度,将私有字段附加到输入对象、概率数据结构。这个泄漏需要解决。到目前为止,我唯一的解决方案是添加一个参数来限制缓存大小,并在每个应用程序的基础上调整该参数。总的。