25

假设您有以下复杂对象:

var object1 = .... // (something complexed)

这会占用x您的 JS 应用程序中的内存量。现在假设您有一些其他对象引用object1

var otherObject = { something: true, value: 'yes', object: object1 };

var anotherObject = { color: '#FFF', object: object1 };

我是否将object1最初占用的内存量增加了两倍?还是引用object1不会增加所用内存的开销?

我不确定如何自己测试以确定答案。(如果您能告诉我如何将我指向一个有助于对此进行基准测试的工具,则可以加分)。

4

2 回答 2

9

在 JavaScript 中,对象总是通过引用传递(参见这个流行的答案)。指向对象的指针当然会占用一些内存(取决于实现),但比实际对象要少得多。

于 2013-05-28T04:24:36.970 回答
7

看看这个问题。数字、字符串等总是按值调用,而对象则通过共享调用;也就是说,它们是按值调用的,但值是对对象的引用。

换句话说,如果您修改指针的属性,您将修改与对象相同的内存池。但是如果重新分配指针,它不会影响原始对象。

这意味着,在您的示例中,您没有将占用的内存量增加三倍object1额外的指针object1将占用一些内存空间。具体有多少空间?这取决于 Javascript 引擎的精确实现,但它总是远小于对象的大小。

至于基准测试,请查看 Mozilla 的 JS 引擎SpiderMonkey文档。那里有很多很好的实用程序......

于 2013-05-28T05:21:48.010 回答