首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript对象的键是否存储在内存中?

JavaScript对象的键是否存储在内存中?
EN

Stack Overflow用户
提问于 2020-07-31 04:13:33
回答 2查看 265关注 0票数 4

我想知道它是否使用更多的内存来存储具有相同键的对象数组,而不仅仅是存储包含值的数组的数组。

代码语言:javascript
复制
const arrayOfObjects = [
    {key1: "val1",      key2: "val2",       key3: "val4",       key4: "val5"},
    {key1: "value1",    key2: "value2",     key3: "value4",     key4: "value5"},
    {key1: "value-1",   key2: "value-2",    key3: "value-4",    key4: "value-5"}
]
const arrayOfArrays = [
    ["val1",    "val2",     "val3",     "val4"],
    ["value1",  "value2",   "value3",   "value4"],
    ["value-1", "value-2",  "value-3",  "value-4"]
]

arrayOfObjects会比arrayOfArrays占用更多的内存吗?更准确地说,密钥是否也存储在内存中?此外,我经常使用JS对象来创建哈希表,以加速算法,但这样做的限制是什么?谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2020-07-31 08:19:23

JavaScript本身并没有指定对象的内存布局,但是所有常见的实现都使用类似于object shapes of the V8 engine的东西。由于所有对象都具有相同的形状,因此它们的属性名称将只存储一次,并由数组中的所有对象共享,无论有多少对象。与数组相比的开销,如果有的话,在算法/数据结构设计中是不值得考虑的。

我经常使用JS对象来制作哈希表,以加速算法,但这样做的限制是什么?

如果您动态添加了太多的属性,甚至是delete属性,引擎将使用不同的对象表示。然而,对于哈希表,你应该使用现代javascript中的Map,它从一开始就针对这个用例进行了优化,而且比对象更有效。

票数 2
EN

Stack Overflow用户

发布于 2020-07-31 04:23:55

与C等语言中在编译时解析的结构成员名称不同,JavaScript属性名称是动态的,并且可以在运行时更改。所以它们必须存储在对象的内存中。JavaScript对象通常实现为哈希表,其中属性名称作为表中的字符串键。

但是,如果在多个对象中使用相同的属性名称,则通常只有该字符串的一个副本,该副本由所有对象共享。参见Do common JavaScript implementations use string interning?。因此,字符串存储在内存中,但不会为每个对象复制。

实现对象的代码是高度优化的,因为您对它们的使用是典型的,并且需要高性能。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63180696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档