javascript引擎v8内联缓存

时间:2013-03-26 02:10:49

标签: javascript performance v8

正如我们所知,v8支持内联缓存以提高性能,

任何人都可以解释v8究竟做了什么以及它如何改善性能?

如果显示示例,那将会很好。

提前感谢。

1 个答案:

答案 0 :(得分:2)

直接来自Chrome V8 page

  

V8首次执行时,会将JavaScript源代码直接编译为机器代码。没有中间字节代码,没有解释器。属性访问由内联缓存代码处理,当V8执行时,可以使用其他机器指令进行修补....

  

... V8通过预测此[对象]类也将用于在同一代码段中访问的所有未来对象来优化属性访问,并使用类中的信息来修补内联缓存代码以使用隐藏的类。如果V8已正确预测,则在单个操作中分配(或获取)属性的值。如果预测不正确,V8会修补代码以删除优化。

例如,从Point对象访问属性x的JavaScript代码是:

point.x

在V8中,为访问x而生成的机器代码是:

# ebx = the point object
cmp [ebx,<hidden class offset>],<cached hidden class>
jne <inline cache miss>
mov eax,[ebx, <cached x offset>]