V8是一个由Google开发的开源JavaScript引擎,用于ChromeC浏览器中。
V8以其效率出名,其高效的原因主要有以下几点:
- 在运行之前将JavaScript编译成了机器码,而非字节码或是解释执行它。
- 使用了如内联缓存(inline caching)等方法来提高性能。
因此,JavaScript程序与V8引擎的速度媲美二进制编译。
传统的Javascript是动态语言,JavaScript继承方法是使用prototype,通过指定prototype属性,便可以指定要继承的目标。属性可以在运行时添加到或从对象中删除,引擎会为运行中的对象创建一个属性字典,新的属性都要通过字典查找属性在内存中的位置。V8为object新增属性的时候,就以上次的hidden class为父类别,创建新属性的hidden class的子类别,如此一来属性访问不再需要动态字典查找了。
为了缩短由垃圾收集造成的停顿,V8使用stop-the-world, generational, accurate的垃圾收集器。在执行回收之时会暂时中断程序的执行,而且只处理对象堆栈。还会收集内存内所有对象的指针,可以避免内存溢出的情况。V8汇编器是基于Strongtalk汇编器。
上面是维基百科的内容,太抽象不是很明白,找到一篇QQ客户端团队关于V8引擎简介的博客,原文地址http://impd.tencent.com/?p=35。
V8引擎作为一种动态语言运行时平台,需要实现动态语言源程序解析、执行,基本流程如下:

