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):强制优化对象到快速模式。