gpt4 book ai didi

javascript - 就内存使用而言,javascript中这两个数组有什么区别?

转载 作者:行者123 更新时间:2023-11-28 04:33:50 27 4
gpt4 key购买 nike

这里我有一个数组,其中的元素的索引以 1 的增量分隔。

let noGap = [];
noGap[0] = 0;
noGap[1] = 1;

这里我有一个不同的数组,其索引由远大于 1 的索引分隔。

let gap = [];
gap[0] = 0;
gap[1000] = 1;

每个变量(noGapgap)使用的内存有什么区别?我可以从 Chrome 控制台日志中看到 gap 的长度更宽,因为它记录 (1001) [0, undefined × 999, 1]

但是如果gap变量确实使用了更多空间,我有兴趣知道它是否与存在的undefined数量成比例在数组中或者如果它是常量。

如果这是重复的问题,请原谅。这是closest answer我找到了,但我无法完全理解答案。

最佳答案

在 V8 中,有一个很大的区别,长而稀疏的数组需要更多的内存。但是,这部分是因为 1000 接近边界,之后 V8 更改了稀疏数组的内部表示。 更长的稀疏数组可能会占用类似的内存量。

我只使用 Chrome 开发工具收集了一点证据(查看内存选项卡),但它就是这样。该表中的每一行都是一个数组,在索引 0 处有一个条目,在末尾有另一个条目来定义其长度。

| sparse array length | retained size |
|---------------------|---------------|
| 1 | 56 |
| 10 | 304 |
| 1000 | 12,184 |
| 2000 | 184 |
| 3000 | 184 |
| 3000, less sparse | 472 |

请注意,内存随着长度扩展至 1000,但在 2000 时要少得多,并且它会随着设置索引的数量而扩展。

假设这是因为 V8 正在从索引 0length(在长度为 1000 的情况)映射到仅包含已设置索引的条目的 HashMap 。

我不知道这实际上是如何运作的,仅供引用。

关于javascript - 就内存使用而言,javascript中这两个数组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44400912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com