【发布时间】:2020-05-23 19:58:18
【问题描述】:
我试图了解像 V8 这样的 JS 引擎如何处理数组中的对象,特别是内存是如何分配的以及它是否有效。
我有一个包含未排序对象的数组,我生成了一个在排序数组中包含相同对象的数组
let obj1 = {'test': 'test1'};
let obj2 = {'test': 'test2'};
let obj3 = {'test': 'test3'};
let arr1 = [obj1,obj3,obj2];
...Do sorting and create a new array (no I don't want to destroy the previous)
let arr2 = [obj1,obj2,obj3];
内存开销仅在索引和对象之间创建的引用中,还是我实际上在内存空间中复制了对象?
【问题讨论】:
-
唯一新的是数组。对象引用不会产生这些对象的副本。您可以通过修改数组中的一个对象来验证这一点,并检查原始对象引用是否也被修改。会的,因为它是同一个对象。
-
您有两个数组,其中包含相同的对象引用值。因此,大小将(大致)为
3*<size of object ref> + <array overhead>。 -
对象是参考值。除非您显式创建一个新对象,否则一切都只会复制对现有对象内容的引用。
-
有道理,谢谢!
标签: javascript arrays v8 spidermonkey