JavaScript对象引用的数据类型是什么,存储它们的最有效方法是什么?

时间:2017-09-08 21:38:19

标签: javascript performance memory-management reference

我们说我们有这个对象:var a = {x: 3}

现在,如果我们有一个数组arr = [a]来保存对这个对象的引用,arr[0]实际存储的是对该对象的引用,而不是实际的对象数据。

我有许多对象(20k +),例如a,我想跟踪它,可能每秒创建一个类似于arr的数组。因为我希望内存分配尽可能高效,我能以某种方式告诉编译器我的数组只包含对a之类的对象的引用吗?我想过使用类似TypedArray的内容,但我不知道a的引用是什么类型,我想我不能只使用new UInt32Array()并实际存储每个索引a

在像C ++这样的语言中,您可以拥有一个指针数组,并且您始终知道指针的大小(例如:64位计算机上的8个字节)。

有没有办法有效地存储ArrayObject中对象的引用/指针?

1 个答案:

答案 0 :(得分:0)

我认为这回答了我自己的问题。我可以创建一个初始数组,添加我想要的元素,然后每当我需要一个新数组时,只需复制一个并更新元素。这样,引用的数据类型无关紧要,因为我可以直接分配数组所需的整个内存。

伪JavaScript中的示例:

var initialArray = [];
// push initial references into this array
// whenever I need a new array do:
var newArray = initialArray.slice();
// update references in the newArray
...
for i in newArray
newArray[i] = newRefi;
...

这样,newArray在创建时将是正确的大小。

LE:虽然这在理论上有效,但它实际上会让性能变差,可能是因为现在创建newArray现在必须复制内存并做其他疯狂的事情,而不仅仅是分配一些内存