如何使用javascript对象处理内存?

时间:2011-01-19 20:49:56

标签: javascript object

假设:

假设EventXObj是一个具有许多属性和一些方法的javascript对象。

EventXObj可以与简单的字符串id相关联,如下所示。

[ "id1" : Event1Obj , "id2": Event2Obj, ..., "id1000": Event1000Obj ]

我们希望表示单个PlaceXObject如何容纳许多事件。

问题:

关于以下内容,场景A是否比场景B占用更多内存?

情景A

PlaceX.events = [ "id1", "id2", "id75", ... ]

情景B

PlaceX.events = [ Event1Obj, Event2Obj, Event75Obj, ... ]

2 个答案:

答案 0 :(得分:2)

从通用角度来看,场景B可能是内存效率最高的场景。 JavaScript中的所有内容都类似于指针/引用,因此B对数组中包含的每个事件使用一个整数(左右)。

场景A使用尽可能多的内存,因此对于长字符串,它会很糟糕。对于你的情况,使用非常短的字符串,但没有太大的区别。

答案 1 :(得分:2)

它完全取决于您正在使用的JavaScript引擎使用的内存模型。

以当前版本的V8为例(假设为32位):

  • 指针= 4个字节。
  • 字符串= 12 + [字符串长度]字节。
  • 连接字符串= 12 + 2 * 4字节(2 * 4,因为它是指向现有字符串的一对指针)。但是,如果需要,可以强制使用扁平字符串。
  • 带有n元素的字典= 3 * 4 * 2 * nearestPowerOfTwo(n)字节。

现在,您可以对当前版本的V8进行数学计算。