【问题标题】:Do object references take up extra memory?对象引用会占用额外的内存吗?
【发布时间】:2023-04-09 04:21:01
【问题描述】:

假设您有以下复杂对象:

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

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

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

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

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

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

【问题讨论】:

  • 似乎是个好问题
  • 嗯,你需要一些内存来表明引用确实存在。否则,你怎么知道它是否存在。

标签: javascript object memory memory-management


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-15
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2022-07-17
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多