问题标签 [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.
javascript - “循环”引用是否会被视为 WeakMap 的“可达性”?
对于给定的代码,唯一的weakMap
项目是否被认为是可达的?因此,它是否会被垃圾收集?
PS:这个问题是从规范的角度提出的,而不是特定的实现。
javascript - 无法理解 ECMA6 中 WeakMap 的行为
在 ECMA6 中使用 WeakMap 时,我遇到了一个奇怪的场景。我正在写一个如下的类
现在调用这个类来实例化一个对象
输出来了
我无法弄清楚 WeakMap 的这种行为。
javascript - 需要 WeakMap (a, b) -> c
我有一个记忆的 fn,其中 fn 由两个输入引用记忆:
我需要的行为是NewRefCursor(a, b) === NewRefCursor(a, b)
. 当a
或b
被垃圾回收时,游标也应该被垃圾回收。
refToHash
是另一个使用ES6WeakMap
的记忆函数,因此仍然允许看到的引用被 GC。
NewRefCursor
记忆起来要棘手得多,因为它使用两个参数来确定缓存命中,因此与 不兼容WeakMap
,因此将阻止看到的任何引用被 GC'ed。我对任何形式的诡计持开放态度,将私有字段附加到输入对象、概率数据结构。这个泄漏需要解决。到目前为止,我唯一的解决方案是添加一个参数来限制缓存大小,并在每个应用程序的基础上调整该参数。总的。
javascript - es6 中 Map 和 WeakMap 集合上的垃圾收集
我正在阅读 WeakMap 的描述,它说:
在本机 WeakMaps 中,对关键对象的引用是“弱”的,这意味着它们不会阻止垃圾回收,以防没有其他对该对象的引用。
通过阅读本文,我的理解是 WeakMaps 用于您尝试利用 JavaScript 的垃圾收集的情况。我根本不明白的是我加粗的那条线。
为什么在普通 Map 中,没有对它们的引用的对象不会被垃圾收集?这样做有什么好处,我是否必须从普通地图中明确删除?
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 应该实现什么行为。
javascript - 使用 EcmaScript 中的 WeakMap 时的时序问题注意事项
JavaScript 中 WeakMap 的正确用法是什么?使用时可能会出现什么样的计时问题?特别是,我想知道在以下情况下会发生什么:
GC 将如何影响 WeakMaps?
更新:我的错,我错过了在 WeakMap 中不能将字符串作为键的事实,如果我考虑到这一事实,我的问题就不会提出。
javascript - WeakMap 能否让我免于父/子关系的内存泄漏?
我有一个看起来像这样的父/子关系。
parent
当所有其他对和的引用child
都被删除时,这会导致内存泄漏吗?只有剩余的引用才会相互引用。如果会因为循环引用导致内存泄漏,会
WeakMap
救我吗?
使用WeakMap
,
我想它不会从那以后,parentMap
有一个参考parent
,并且parent
有一个参考child
。还有一个循环引用。
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:
javascript - 当你有对象作为键时,你什么时候会在 WeakMap 上使用 Map?
有几次我使用对象作为映射中的键,我这样做是为了存储有关该特定对象的元数据。我一直WeakMap
为此使用 a ,因为当它用作键的对象被垃圾收集时,映射中的条目会自动被垃圾收集的好处。
存储元数据是我能想到的将对象作为映射中键的唯一用例,但我很好奇是否还有其他将对象作为键的用例,如果在这些情况下,您会Map
在WeakMap
.
javascript - JavaScript WeakMap 不断引用 gc'ed 对象
我正在使用 JavaScript 弱图,在 google chrome 开发人员控制台中尝试此代码后,使用 --js-flags="--expose-gc" 运行,我不明白为什么弱图继续引用 ab 如果是gc'ed。