v8 对象中 "fast"、"inlinable" 属性的数量限制是多少?

What is the limit on the number of "fast", "inlinable" properties in v8 object?

v8 专家提问。

我们知道,如果对象的“形状”没有变化,v8会将对象属性存储在一个特殊的数组中,并通过索引访问它们,这样访问速度非常快。我可能在细节上有误。

如 2018 年 this blog post 中所述,此数组的大小限制为 1022。

这个信息还正确吗?也许最近对此有一些改进?

谢谢!

虽然我不知道那个博客 post 是怎么得出这个数字的,但是 kMaxNumberOfDescriptors 的当前值为 1020,PropertiesArray 中的最大条目数是1023. 不确定为什么会有差异,也不确定它是否重要...在快速测试中,似乎 1020 是有效的最大值,但也许我忽略了一些方法来使对象增长到 1022 个属性而不过渡到字典模式。

元观察:JS 引擎中的对象处理比只有一个限制要复杂得多。参见例如TooManyFastProperties()找点乐子。

if the "shape" of the object does not change, v8 stores the object properties in a special array

这是一个不正确的简化。特别是,添加属性(构成形状变化)通常不会触发到字典模式的转换。