假设您有以下复杂对象:
var object1 = .... // (something complexed)
这会占用JS应用程序中x
的内存量。现在假设您有一些引用object1
的其他对象:
var otherObject = { something: true, value: 'yes', object: object1 };
var anotherObject = { color: '#FFF', object: object1 };
我object1
最初占用的内存量是否增加了两倍?或者对object1
的引用是否会增加所用内存的开销?
我不确定如何自己测试以确定答案。 (如果你能告诉我如何指出一个有助于对此进行基准测试的工具,那么可以给予积分。)
答案 0 :(得分:5)
对象总是通过JavaScript引用传递(请参阅此popular answer)。当然,指向对象的指针需要一些内存(取决于实现),但远远低于实际对象。
答案 1 :(得分:5)
看看this question。数字,字符串等总是按值调用,但对象是called by sharing;也就是说,它们是按值调用的,但该值是对象的引用。
换句话说,如果修改指针的属性,则修改与对象相同的内存池。但是如果重新指定指针,它不会影响原始对象。
这意味着,在您的示例中,不将object1
占用的内存量增加了三倍,但指向{的额外指针{1}}将占用一些内存空间。究竟有多大空间?这取决于Javascript引擎的精确实现,但它总是远小于对象的大小。
就基准测试而言,请查看Mozilla的JS引擎文档SpiderMonkey。那里有很多好的工具.......