- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在 JavaScript 中缓存大对象。这些对象是通过键来检索的,缓存它们是有意义的。但它们不会一次全部放入内存,所以我希望在需要时对它们进行垃圾回收 - GC 显然知道得更多。
使用其他语言中的 WeakReference
或 WeakValueDictionary
来创建这样的缓存是非常简单的,但是在 ES6 中我们有 WeakMap
, 键弱的地方。
那么,是否有可能制作类似 WeakReference
的东西或从 WeakMap
制作垃圾收集缓存?
最佳答案
在两种情况下,弱散列映射很有用(您的似乎适合第二种情况):
希望将信息附加到具有已知身份的对象;如果该对象不复存在,附加的信息将变得毫无意义,同样应该不复存在。 JavaScript 支持这种情况。
人们希望合并对语义相同对象的引用,以减少存储需求并加快比较。例如,将许多对相同大子树的引用替换为对同一子树的引用可以允许内存使用和执行时间减少一个数量级。不幸的是,JavaScript 不支持这种情况。
在这两种情况下,表中的引用只要有用就会一直保持事件状态,当它们变得无用时将“自然地”变得符合收集条件。不幸的是,WeakReference
的设计者并没有为上面定义的两种用法实现单独的类。做了它所以它可以有点用于任何一个,虽然不是非常好。
在键定义相等性以表示引用标识的情况下,WeakHashMap
将满足第一个使用模式,但第二个将毫无意义(持有对与存储键语义相同的对象的引用的代码将持有对存储键的引用,并且不需要 WeakHashMap 给它一个).在键定义某种其他形式的相等性的情况下,表查询返回除了对存储对象的引用之外的任何内容通常没有意义,但避免存储引用保持键事件的唯一方法是使用WeakHashMap<TKey,WeakReference<TKey>>
并让客户端检索弱引用,检索存储在其中的键引用,并检查它是否仍然有效(它可以在 WeakHashMap
返回 WeakReference
和 WeakReference
本身被检查之间收集) .
关于javascript - 通过 Javascript WeakMaps 收集垃圾的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25567578/
我一直在阅读有关 WeakMap 的 MDN 文档。它提到了语法: new WeakMap([iterable]) 但是当我尝试这个时,发生了错误: var arr = [{a:1}]; var wm
这个问题在这里已经有了答案: JavaScript(ES6) WeakMap garbage collection when set an object to null (2 个答案) 关闭 4 年
我在使用 javascript 处理类的私有(private)成员时遇到了一个问题,我自己无法解决。 "use strict"; var privateData = new WeakMap(); cl
class Cat { storage = new Map() constructor(id) { if(storage.has(id)) return storage.get(id
JavaScript WeakMap不允许您通过设计获得 key 、长度或大小。 是否有可能以某种方式循环访问条目? 如果不是.. Chrome 控制台是如何做到这一点的? 最佳答案 Is it po
我正在构建 Ionic 应用程序并且一切正常,但是当我将我的源代码克隆到另一台机器时,出现如图所示的错误。 虽然应用程序在第一台机器上编译没有错误,但我检查了 Ionic、npm、typescript
标准是这样说的,毫无疑问,原始类型不能用作 WeakMap 中的键。 ;但什么是 技术原因添加这样的限制? 我想实现一个简单的 hash将 JS 值映射到 0-65535 的函数,如果使用 WeakM
为什么在 WeakMap 中不能直接访问项目?当垃圾收集器删除作为 WeakMap 键的链接时,与此键相关联的值也会被删除吗? 最佳答案 通过“直接访问项目”,我假设您的意思是为什么它们不可枚举?这是
这个问题在这里已经有了答案: How to iterate over a WeakMap? (3 个答案) Why will ES6 WeakMap's not be enumerable? (2
我的父/子关系如下所示。 parent.children = [child]; child.parent = parent; 当删除对 parent 和 child 的所有其他引用时,这是否会导致内存
我在我的 VS 中使用 typescript 1.6,当我尝试使用 WeakMap 时,我发现 Typescript 无法识别名称 WeakMap。 var _mdSideNav: typeof
ECMAScript 6中引入的WeakMap数据结构的实际用途是什么? 由于弱映射的键创建了对其对应值的强引用,因此确保已插入弱映射的值永远不会消失,只要其键还活着,它不能用于备忘录表、缓存或您通常
WeakMap polyfill尝试在不可扩展对象上定义属性时抛出错误。这些位于一堆节点、javascript 代码和库的中间,因此我实际上无法指出导致问题的原因。还有许多其他库也有自己的 polyf
我正在尝试基于 Angular 2 + Universal & ASP.NET Core Advanced Starter 构建门户 不幸的是,这个解决方案包含内置的“WeakMap”集合,即 com
我遇到了JavaScript library实现跨浏览器WeakMap在ES5中。 (WeakMap 预计用于 ES6。) 如果没有 JavaScript 语言本身的支持,这怎么可能工作? 编辑:需要
在我重新进入 JavaScript(及相关)之前,我已经完成了大量的 ActionScript 3,其中有一个带有弱键的 Dictionary 对象,就像即将推出的 WeakMap 一样;但 AS3
我有一个 memoized fn,其中 fn 由两个输入引用内存: let NewRefCursor = memoized( (deref, swap) => refToHash(deref)
我正在探索新的 ES6 功能:WeakMap。我从在 MDN 上找到的基本示例开始。 我遇到的问题是无法循环 WeakMap 元素。我收到错误: Uncaught TypeError: weakMap
我遇到了JavaScript library实现跨浏览器WeakMap在ES5中。 (WeakMap 预计用于 ES6。) 如果没有 JavaScript 语言本身的支持,这怎么可能工作? 编辑:需要
我正在使用 JavaScript weakmaps,在 google chrome 开发者控制台中尝试这段代码后,使用 --js-flags="--expose-gc"运行,我不明白为什么 weakm
我是一名优秀的程序员,十分优秀!