v8 中的内联缓存

Posted

技术标签:

【中文标题】v8 中的内联缓存【英文标题】:Inline Caching in v8 【发布时间】:2015-09-30 16:55:36 【问题描述】:

我了解内联缓存仅在特定访问在同一位置重复执行时才有用。它不考虑单独进行的访问。

例如, for(i=0;i

在这里,内联缓存会很有帮助,因为每次访问都是独立进行的。但考虑关注

obj.x; 对象.x; .... 1000 次..

在这种情况下,内联缓存没有帮助。这是真的吗?

如果是这种情况,在不会重复的位置/访问处修补内联缓存存根有什么意义。

【问题讨论】:

好吧,你不能确定它们不会重复,因为它们所在的函数可能会被调用一百万次。除此之外,是的,在这种情况下它不是很有帮助。但至少可以说这是一种非常不寻常的编码实践。据我所知,内联缓存不知道上下文,并且总是使用,即使在完整的代码生成中也是如此。 【参考方案1】:

内联缓存在函数调用中持续存在,因此即使是单个访问在函数内部时也会受益。无法知道函数会被调用多少次。

【讨论】:

以上是关于v8 中的内联缓存的主要内容,如果未能解决你的问题,请参考以下文章

V8中的快属性与内联缓存

图解 Google V8 # 16:V8是怎么通过内联缓存来提升函数执行效率的?

V8中的代码缓存--code caching

V8中的代码缓存--code caching

初学J2V8

什么是Google V8 JavaScript引擎