双向WeakMap会导致内存泄漏吗?

xxh

据我对原生JavaScript WeakMap的了解,它们弱存储密钥,而强存储它们的值,对吗?

如果是这样,是否在WeakMap中同时使用一个值,一个键和一个值来防止对象被垃圾回收?

const domElement0 = ...;
const domElement1 = ...;

const map = WeakMap([
    [ domElement0, domElement1 ],
    [ domElement1, domElement0 ]
]);

假设在该代码段中WeakMap始终可用,那么我将假定,如果domElement0无法访问,则domElement1不会进行垃圾收集,反之亦然,但是如果它们都变得无法访问并与DOM分离,我是否可以知道它们都将在大多数浏览器中都具有使用GC的资格?

如果是这样,有人可以提供参考说明为什么可行吗?

巴尔玛

我认为它们应该变成垃圾。

WeakMap对象的规范具有以下注意事项:

WeakMap和WeakSets旨在提供一种机制,用于在没有WeakMap或WeakSet的情况下以其他方式将状态与对象动态关联,从而不会“泄漏”内存资源,否则该对象将变得不可访问并受实现的资源回收垃圾收集机制。

因此,如果对对象的唯一引用是通过WeakMap条目进行的,而键不能通过从WeakMap外部开始的某些引用链进行访问,则对象将变为垃圾。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章