V8 对象访问模式
隐藏类(HiddenClass)占内存,但加快访问速度
in-object properties 是访问最快了,初始化时就预先确定了
稀疏数组的"空隙"会被标记以提高访问速度,但增加了内存占用
- Dictionary(Slow) Mode:字典模式也称为哈希表模式,V8 使用哈希表来存储对象的属性。
- Stable(Fast) Mode:使用类似数组(C Struct)结构来存储对象的属性并使用 Offset 进行访问。
新创建的小对象为快速模式(Fast Mode),当执行如下操作时会退化成为字典模式(Dictionary Mode):
- 动态添加过多的属性
- 删除非最后添加的属性(V8 >= 6.0)
在开发调试过程中,可以调用 V8 的 RuntimeCall (开启 --allow-natives-syntax)来判断与优化对象当前的状态:
- %HasFastProperties(Object): 判断对象当前是否处于快速模式下。
- %ToFastProperties(Object):强制优化对象到快速模式。