【问题标题】:JS Map from Object.entries memory usage来自 Object.entries 内存使用情况的 JS 映射
【发布时间】:2019-07-30 09:49:32
【问题描述】:

我正在尝试找出具有约 20k 个条目的 javascript Map 对象的内存使用情况——键是一个字符串,值是一个由 1-2 个字符串组成的数组。 我创建了 2 个地图:具有 17k 和 22k 条目。它们在 chrome profiler 中的内存使用情况相同 - 如何?

为什么只有在创建它们的对象从作用域中删除之后,Map 对象的大小才会有所不同? 另外,我知道 hashmaps 是如何工作的,但是如果有人知道 js Map 如何保持订单,请告诉我(也许只是一个链接列表?)。

function createMap(){
    var obj = JSON.parse(bigStringRepresentingTheJSON);
    return new Map(Object.entries(obj));
}

查看分析器,我发现两个地图都占用了 917kb - 这怎么可能? 但是制作它们的对象(obj)需要 786kb 和 1 572kb - 这是合理的。

所以我想也许 Map 拥有一个指向创建它的 obj 的指针,这就是为什么它们的大小没有区别?然后,我使用 createMap 函数让 obj 得到垃圾收集。只有这样,Map 对象才会占用 1 个 9kb 和 2.3kb,这是意料之中的。

【问题讨论】:

    标签: javascript dictionary object memory


    【解决方案1】:

    缩放地图是复杂的,如果数据大小

    如果完成了,地图的大小完全取决于实现。

    所以我想也许 Map 拥有一个指向创建它的 obj 的指针,这就是为什么它们的大小没有区别?

    不,地图只包含对obj 中值的引用。

    【讨论】:

    • 谢谢!你在我的声明中说“不”,然后说了同样的话,除了“参考”而不是“poiter”。为什么当 obj 超出范围时 Map 内存使用量会增加?
    • 我确实感觉您从所看到的指标中得出了错误的结论。也请仔细阅读。 “obj 的值”不代表obj
    • 是的,这对我来说似乎是错误的,所以我问了这个问题。不知道为什么 obj 超出范围会使分析器显示地图占用更多内存。
    猜你喜欢
    • 2011-07-10
    • 2020-09-07
    • 2016-01-07
    • 2011-08-30
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    相关资源
    最近更新 更多