作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
JavaScript 中 WeakMap 的正确用法是什么?使用时可能会出现什么样的时序问题?我特别想知道在以下情况下会发生什么:
var wm1 = new WeakMap()
var o1 = {},
o2 = function(){},
o3 = window;
// in other method:
wm1.set(o1, 37);
wm1.set(o2, "azerty");
if (wm1.has(o2)) {
//Garbage collection happen here, objects from wm1 may no longer exists
Console.log(wm1.get(o2)) // what will happen here? just undefined? null?
}
GC 将如何影响 WeakMap?
更新:我的错,我错过了一个事实,即你不能将字符串作为 WeakMap 中的键,如果我考虑到这一事实,我的问题就不会成立。
最佳答案
WeakMap
被明确设计为不表现出最不可见的垃圾收集行为。绝对会出现零问题。
在您的特定情况下,只要您持有对对象或函数的引用(通过仍在堆栈上的实时变量o1
和o2
),您将能够在 WeakMap
或 WeakSet
中找到它们。一旦您不再持有对它们的引用,并且没有人这样做,它们就有资格进行垃圾收集(就像往常一样) - 鉴于此,没有人能够尝试在集合中查找它们。
关于javascript - 从 EcmaScript 使用 WeakMap 时的计时问题注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35759756/
首先我要承认,即使在阅读了一些相关资源之后,我对 Linux 上的高内存和低内存的概念仍然没有完全清楚。然而,据我了解,64 位 Linux 上无论如何都没有高内存(如果我错了,请纠正我)。 我试图了
我是一名优秀的程序员,十分优秀!