对象引用会占用额外的内存吗?

时间:2013-05-28 04:19:02

标签: javascript object memory memory-management

假设您有以下复杂对象:

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

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

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

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

object1最初占用的内存量是否增加了两倍?或者对object1的引用是否会增加所用内存的开销?

我不确定如何自己测试以确定答案。 (如果你能告诉我如何指出一个有助于对此进行基准测试的工具,那么可以给予积分。)

2 个答案:

答案 0 :(得分:5)

对象总是通过JavaScript引用传递(请参阅此popular answer)。当然,指向对象的指针需要一些内存(取决于实现),但远远低于实际对象。

答案 1 :(得分:5)

看看this question。数字,字符串等总是按值调用,但对象是called by sharing;也就是说,它们是按值调用的,但该值是对象的引用。

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

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

就基准测试而言,请查看Mozilla的JS引擎文档SpiderMonkey。那里有很多好的工具.......