问题标签 [weakmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
516 浏览

javascript - “循环”引用是否会被视为 WeakMap 的“可达性”?

对于给定的代码,唯一的weakMap项目是否被认为是可达的?因此,它是否会被垃圾收集?

PS:这个问题是从规范的角度提出的,而不是特定的实现。

0 投票
1 回答
870 浏览

javascript - 无法理解 ECMA6 中 WeakMap 的行为

在 ECMA6 中使用 Wea​​kMap 时,我遇到了一个奇怪的场景。我正在写一个如下的类

现在调用这个类来实例化一个对象

输出来了

我无法弄清楚 WeakMap 的这种行为。

0 投票
2 回答
481 浏览

javascript - 需要 WeakMap (a, b) -> c

我有一个记忆的 fn,其中 fn 由两个输入引用记忆:

我需要的行为是NewRefCursor(a, b) === NewRefCursor(a, b). 当ab被垃圾回收时,游标也应该被垃圾回收。

refToHash是另一个使用ES6WeakMap的记忆函数,因此仍然允许看到的引用被 GC。

NewRefCursor记忆起来要棘手得多,因为它使用两个参数来确定缓存命中,因此与 不兼容WeakMap,因此将阻止看到的任何引用被 GC'ed。我对任何形式的诡计持开放态度,将私有字段附加到输入对象、概率数据结构。这个泄漏需要解决。到目前为止,我唯一的解决方案是添加一个参数来限制缓存大小,并在每个应用程序的基础上调整该参数。总的。

0 投票
2 回答
1680 浏览

javascript - es6 中 Map 和 WeakMap 集合上的垃圾收集

我正在阅读 WeakMap 的描述,它说:

在本机 WeakMaps 中,对关键对象的引用是“弱”的,这意味着它们不会阻止垃圾回收,以防没有其他对该对象的引用

通过阅读本文,我的理解是 WeakMaps 用于您尝试利用 JavaScript 的垃圾收集的情况。我根本不明白的是我加粗的那条线。

为什么在普通 Map 中,没有对它们的引用的对象不会被垃圾收集?这样做有什么好处,我是否必须从普通地图中明确删除?

0 投票
0 回答
74 浏览

javascript - 如何实现 ES6 WeakMap polyfill(与 Java 相比)

首先,这个问题背后我真正想要的是知道是否可以在 Javascript 中实现可靠的 SoftMap。

Babel 或Memoizee库似乎为 ES6 WeakMap/Set 提供了 polyfill。我试图阅读代码,但我不确定它是如何工作的。


来自Java背景,了解什么是WeakMap(WeakHashMap由来已久,甚至Weak/Soft/Phantom也有很长一段时间的引用)。

问题是,在 Java 中,为了实现 WeakHashMap,我们使用 JVM 提供的低级原语,如WeakReference

我真的不明白如何WeakMap在没有低级引用原语的情况下创建 polyfill。

有人可以向我解释一下,在我们想要填充的旧浏览器中,如果地图外的某些对象引用该键,如何跟踪地图键?


还有一点不清楚。在 Java 中,我们有软引用和弱引用,而在 Javascript 中只有弱映射/集。在阅读了一些关于 WeakMap 的 内容后,我仍然不清楚 GC 将如何决定收集地图条目。如果密钥变得不可访问,GC:

  • 始终立即收集条目
  • CAN总是立即收集条目(但如果现在不需要内存,可以稍后再收集)

这就是 Java 中 Weak 和 Soft 的区别,不清楚 ES6 应该实现什么行为。

0 投票
1 回答
37 浏览

javascript - 使用 EcmaScript 中的 WeakMap 时的时序问题注意事项

JavaScript 中 WeakMap 的正确用法是什么?使用时可能会出现什么样的计时问题?特别是,我想知道在以下情况下会发生什么:

GC 将如何影响 WeakMaps?

更新:我的错,我错过了在 WeakMap 中不能将字符串作为键的事实,如果我考虑到这一事实,我的问题就不会提出。

0 投票
1 回答
95 浏览

javascript - WeakMap 能否让我免于父/子关系的内存泄漏?

我有一个看起来像这样的父/子关系。

  1. parent当所有其他对和的引用child都被删除时,这会导致内存泄漏吗?只有剩余的引用才会相互引用。

  2. 如果会因为循环引用导致内存泄漏,会WeakMap救我吗?

使用WeakMap,

我想它不会从那以后,parentMap有一个参考parent,并且parent有一个参考child。还有一个循环引用。

0 投票
2 回答
1561 浏览

javascript - Why is WeakMap clear() method deprecated?

I have been working with WeakMaps in JavaScript, and after checking the documentation I realized that the clear method has been deprecated / removed from ECMAScript 6.

What is the reason for this? Why force us to do a clear function like:

0 投票
1 回答
437 浏览

javascript - 当你有对象作为键时,你什么时候会在 WeakMap 上使用 Map?

有几次我使用对象作为映射中的键,我这样做是为了存储有关该特定对象的元数据。我一直WeakMap为此使用 a ,因为当它用作键的对象被垃圾收集时,映射中的条目会自动被垃圾收集的好处。

存储元数据是我能想到的将对象作为映射中键的唯一用例,但我很好奇是否还有其他将对象作为键的用例,如果在这些情况下,您会MapWeakMap.

0 投票
1 回答
1106 浏览

javascript - JavaScript WeakMap 不断引用 gc'ed 对象

我正在使用 JavaScript 弱图,在 google chrome 开发人员控制台中尝试此代码后,使用 --js-flags="--expose-gc" 运行,我不明白为什么弱图继续引用 ab 如果是gc'ed。